В TextView пользователь может вставлять текст и изображения, как заметки.Чтобы сохранить все содержимое TextView в базе данных (Realm), я заменил само изображение на шаблон «[image] imageName [/ image]», поэтому, когда я загружаю эти данные обратно в TextView, я хочу заменить этот шаблон обратно.для изображений.Я сделал эту функцию:
let attributedString = NSMutableAttributedString(string: txtNote.text)
let range = NSRange(location: 0, length: attributedString.string.utf16.count)
let regex = NSRegularExpression("[image](.*?)[/image]")
for match in regex.matches(in: attributedString.string, options: [], range: range) {
if let rangeForImageName = Range(match.range(at: 1), in: attributedString.string){
let imageName = String(attributedString.string[rangeForImageName])
if let image = loadImage(named: imageName) {
let attachment = NSTextAttachment()
attachment.image = image
let oldWidth = attachment.image!.size.width;
let scaleFactor = (oldWidth / (txtNote.frame.size.width - 10))
attachment.image = UIImage(cgImage: attachment.image!.cgImage!, scale: scaleFactor, orientation: .up)
let attString = NSAttributedString(attachment: attachment)
txtNote.textStorage.insert(attString, at: txtNote.selectedRange.location)
} else {
print("Image not found")
}
}
}
У меня также есть это расширение, чтобы избежать перехвата попытки в функции выше:
extension NSRegularExpression {
convenience init(_ pattern: String) {
do {
try self.init(pattern: pattern)
} catch {
preconditionFailure("Illegal regular expression: \(pattern).")
}
}
}
Пример, который я запускаю, содержимое на attribuStString:
Like Gorillaz :D
[image]4397ACA6-ADDC-4977-8D67-9FF44F10384A.jpeg[/image]
[image]9BE22CA8-9C6C-4FF9-B46F-D8AF33703061.jpeg[/image]

Etc.{
}
Должно быть 2 совпадения, а имена изображений должны быть: "4397ACA6-ADDC-4977-8D67-9FF44F10384A.jpeg" и "9BE22CA8-9C6C-4FF9-B46F-D8AF33703061.jpeg",
Но моя функция возвращает 14 совпадений и имена изображений, такие как: "k", "ll", "", "] 4397ACA6-ADDC-4977-8D67-9FF44F10384A.jp", "[" и т. Д..
Есть идеи, что я делаю не так?Весь день я безуспешно искал подобные ошибки.