Swift

Swift:正規表現でwebViewを置換進捗状況4

ほとんど崩れてきています。

情けないほどにボロボロになっています。

正規表現かどうかのチェック結果をBoolで返すことにしました。

  • wRegular = try NSRegularExpression(pattern:pValue, options:NSRegularExpressionOptions())
    return (wRegular, true)
  • エラーのとき、NSRegularExpression()を返していたのですが、呼び出し元でこれでチェックしても引っかからないのでBoolで返すことにしました。

Swift (2.1)で一通り正規表現を触ってみたによると、正規表現の一致はlet range = result.rangeAtIndex(idx)で対象文字列位置・長さを取り出せることになっていますが、これだと異常終了します。result自体は抽出済みであり、let range = result.rangeAtIndex(0)とすれば、当該フィルタに対応する文字列の位置・長さをgetできることがわかりました。多分、これでいいと思いますが、どうなのでしょう?

また、変換は、wString = (wString as NSString).stringByReplacingOccurrencesOfString(wValue, withString:””, options:.RegularExpressionSearch, range:wRange )のように書けばいいことがわかりました。

NSMakeRange(wStart, wUpdatedSize)でフィルタ位置・長さを更新していけばいいです。ただ、開始位置と残りの長さを指定することに注意が必要です。これをまちがうと暴走します。
wStart = wRange.location
wUpdatedSize = wString.characters.count  – wStart

ここに至ってはじめて、正規表現そのものの記述に問題があることがわかりました。フィルタがヒットしないことで問題が判明しました。