正規表現と反復

正規表現でマッチした部分について連続で何か処理を行うとき,今までは面倒だったからこんな風に書いていた。

str.replace(regexp, func);

置換後の文字列が生成されるなど,メモリと処理時間を無駄使いしてしまう書き方だ。楽だけど。
そこで,手軽さを保ちつつ資源を節約できるように,こんなメソッドを書いてみた。

String.prototype.forEach = function(regex, func) {
    var r;
    if(!regex.global) {
      if((r = regex.exec(this)) != null)
        func.apply(this, r);
      return;
    }
    while((r = regex.exec(this)) != null) {
      func.apply(this, r);
    }
}

replaceを使うよりはマシなんじゃないかなと。名前は要検討。