IOS 如何在 swift 中获取 String.range(of:string) 的倍数

IOS How to get String.range(of:string) multiple in swift

MyText 是

let myString: NSAttributedString = <siren> 123123 <siren> 123123 <siren>
let myRange = myString.string.range(of:"<siren>")
let newString = NSMutableAttributedString()
newString.append(myString)
if myRange != nil{
  newString.replaceCharacters(in: NSRange(myRange, in:myString.string), 
            with:myAttributeString as NSAttributedString!)
}

如果 myString 有一个 <siren> 这是可行的,但如果它有两个以上 <siren>

就不行了

只替换第一个<siren>

我认为String.rangereturn第一个值

如何全部找到它们?

如果你想找到所有范围你可以尝试使用这个问题的解决方案get all ranges of a substring in a string in swift

但如果您这样做的主要目的是替换某些 string/pattern 的出现,您可以添加这样的扩展名:

extension String {

  func replacing(pattern: String, withTemplate: String) throws -> String {
    let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
    return regex.stringByReplacingMatches(in: self,
                                          options: [],
                                          range: NSRange(0 ..< utf16.count),
                                          withTemplate: withTemplate)
  }
}