Swiftで正規表現と文字列置換

Swiftで正規表現で特定のパターンを見つけて文字列置換をしてみました。 StringとNSString(前からあるやつ)があって使い分けが必要なのと、文字が何文字目かでマッチした文字を取り出すみたい。

func myMethod(_ inStr: String?) -> String? {
    guard let html = inStr else {return nil}
    let html_ns = html as NSString
    var html_result = html
    let regExp = try? NSRegularExpression(
        pattern: ":([^_]+)_([^_]+)_([^:]*):",
        options: NSRegularExpression.Options())
    guard let matches = regExp?.matches(in: html,
        options: NSRegularExpression.MatchingOptions(),
        range: NSMakeRange(0, html_ns.length)) else {return nil}
    for m in matches {
        let command = html_ns.substring(with: m.range(at: 1))
        let param = html_ns.substring(with: m.range(at: 2))
        let text = html_ns.substring(with: m.range(at: 3))
        let command_esc = NSRegularExpression.escapedPattern(for: command)
        let param_esc = NSRegularExpression.escapedPattern(for: param)
        let text_esc = NSRegularExpression.escapedPattern(for: text)
        switch command {
            case "page":
                    html_result = html_result.replacingOccurrences(
                    of: ":\(command_esc)_\(param_esc)_\(text_esc):",
                    with: "<button onclick=\"webkit.messageHandlers.Page.postMessage('\(param_esc)')\">\(text)</button>",
                    options: .regularExpression,
                    range: html_result.range(of: html_result))
            default:
                print(“not implemented")
        } // switch
    } // for
    return html_result
} // func

上記の関数で 「バナナの説明は:page_123_バナナの説明:をクリック」という文字列があると バナナの説明は

<button onclick="webkit.messageHandlers.Page.postMessage(‘123')">バナナの説明</button>をクリック

という風に置き換えます。