如何将正则表达式应用于带属性的字符串
我正在开发一个语法高亮工具,但这需要正则表达式(我知道,这对高亮工具来说并非最佳选择,不过这只是一次测试)。不过,当我尝试将AttributedString与正则表达式结合使用时,似乎不起作用。
另外,关于正则表达式的String方法(我在考虑它可能是 range(of:_)、matches(:_),或是完全不同的东西)在我这边根本不存在。我已经导入了Foundation,所以不知道这是客户端的问题(尽管以Xcode的情况来看,这种可能性很小),还是哪里出了问题。
解决方案
要将带属性的字符串转换为普通字符串,请取它的 characters 并强制转换为String。
现在对你的正则表达式进行匹配。
要把字符串中匹配的范围转换为带属性字符串中的一个范围,请使用Range初始化器,其中 in: 代表该带属性字符串。
简单示例:
do {
var attributedString = AttributedString("This is a test.")
let underlyingString = String(attributedString.characters)
let pattern = "test"
let regex = try Regex(pattern)
let matches = underlyingString.matches(of: regex)
for match in matches {
let stringRange = match.range
if let attributedRange = Range(stringRange, in: attributedString) {
attributedString[attributedRange].foregroundColor = .green
}
}
print(attributedString)
} catch {
print("error:", error)
}
结果:
This is a {
}
test {
NSColor = UIExtendedSRGBColorSpace 0 1 0 1
}
. {
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。