ユーザーが指定した文字列から "@mentions"を解析しようとしています。正規表現自体はそれらを見つけるようですが、emojiが存在する場合、それが提供する範囲は正しくありません。Emojiが存在するときにNSRegularExpressionを使用すると不正な範囲が生成される
let text = " @joe "
let tagExpr = try? NSRegularExpression(pattern: "@\\S+")
tagExpr?.enumerateMatches(in: text, range: NSRange(location: 0, length: text.characters.count)) { tag, flags, pointer in
guard let tag = tag?.range else { return }
if let newRange = Range(tag, in: text) {
let replaced = text.replacingCharacters(in: newRange, with: "[email]")
print(replaced)
}
}
この tag
=(所在地:7、長さ:2)を実行して
を、期待される結果は [email]
あなたがNSRangeを必要とするときNSRegularExpressionsでNSStringのを使用してください - https://stackoverflow.com/a/39701370/3937 –
'text.characters.count'は' NSRangeためtext.utf16.count'でなければなりません。 –