我目前正在使用NSRegularExpressions
(regex
),我正在构建markdown regex
。
我认为我改变与regex
相匹配的文字的方法并不是最好的,这就是原因。
我创建了以下内容,例如:
UITextViewDelegate
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
regularExpression()
return true
}
func regularExpression() {
// Some other regular expressions....
let boldPattern = "\\*{2}([\\w\\d ]+)\\*{2}"
do {
let regex = try NSRegularExpression(pattern: boldPattern)
let results = regex.matches(in: str, range: NSRange(str.startIndex..., in: str))
_ = results.map {
self.applyAttributes(toRange: $0.range, withType: .bold)
}
} catch let err{
print("error:", err.localizedDescription)
}
}
如上所述,为了让我在用户输入后立即更新文本,我目前正在浏览每个插入字符的文本,并分析是否存在任何匹配模式(在本例中为粗体)作为**一些文字**);
通过这样做,当我进行输入时,CPU使用率从3%增加到25%,因此我认为这不是最好的方法。
在用户输入时,即时应用NSRegularExpressions
的最佳方法是什么? - 我目前正在使用最好的一个吗?
谢谢
答案 0 :(得分:2)
一个非常简单的解决方案是在调用*
方法之前检查插入的文本是否包含regularExpression
(星号):
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text.contains("*"){
regularExpression()
}
return true
}