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>をクリック
という風に置き換えます。