let regex = try! NSRegularExpression(pattern: "[\\*]{1}[^\\*]+[\\*]{1}")
regex 是匹配的正则表达式:
一个星号: [\\*]{1} . 其次是,
一个或多个不是星号的字符: [^\\*]+ . 其次是,
一个星号: [\\*]{1}
我们来看看比赛:
let str = "This is my *awesome* label which *should* change color"
let length = (str as NSString).length
let rg = NSRange(location: 0, length: length)
let matches = regex.matches(in: str, range: rg)
let ranges = matches.map {$0.range}
让我们创建一个可变的属性字符串:
let attributedString = NSMutableAttributedString(string: str)
并将 foregroundColor 属性添加到匹配项中,并删除星号:
let attribute = [NSAttributedString.Key.foregroundColor: UIColor.orange]
let startIndex = str.startIndex
ranges.reversed()
.forEach{ range in
attributedString.addAttributes(attribute, range: range)
let start = str.index(startIndex, offsetBy: range.lowerBound.advanced(by: 1))
let end = str.index(startIndex, offsetBy: range.upperBound.advanced(by: -1))
let withoutAsterisk = String(str[start..<end])
attributedString.replaceCharacters(in: range, with: withoutAsterisk)
}
1 回答
您可以使用正则表达式:
regex
是匹配的正则表达式:一个星号:
[\\*]{1}
. 其次是,一个或多个不是星号的字符:
[^\\*]+
. 其次是,一个星号:
[\\*]{1}
我们来看看比赛:
让我们创建一个可变的属性字符串:
并将
foregroundColor
属性添加到匹配项中,并删除星号:并设置标签的
attributedText