2010-05-08
JavaScriptでマッチ文字列全置換はどうするのがいい?
JavaScriptのStringオブジェクトの文字列置換メソッドであるreplaceは最初にマッチした文字列しか置換しません.
※str.replace('hoge', 'fuga', 'g')のようにgオプションを指定する方法はFirefoxのみのようです
「JavaScript 文字列 置換 全て」とかでググるとこちらのページが真っ先にヒットします.
このページによれば全置換する方法は以下の2つだとか.
var value="Hello World"; value.replace(/o/g, "*");
var value="Hello World"; value.split("o").join("*");
ふむふむ.っで,どっちが良いの?
どちらでも目的が達成できるのであれば,どうせなら高速な方を採用したいもの.
PHPではパフォーマンスを考慮すると,正規表現を使わなくてもよいものは使わないのが鉄則.
となると2が有力か?いや,でもsplitしてjoinってどうなの??
そんなわけでどちらが良いのか検証してみました.
検証コード
var str1 = '"hoge"', str2 = '"hoge" "fuga" "foo" "bar"'; globalmatch(str1); // (1) splitjoin(str1); // (2) globalmatch(str2); // (3) splitjoin(str2); // (4) function globalmatch(str){ alert(str.replace(/"/g, '\\"')); date = new Date; for (var i = 0; i < 100000; i++) str.replace(/"/g, '\\"'); alert(new Date - date); } function splitjoin(str){ alert(str.split('"').join('\\"')); date = new Date; for (var i = 0; i < 100000; i++) str.split('"').join('\\"'); alert(new Date - date); }
http://abicky.site90.com/test/replace.html
結果(ms)
Browser | (1) | (2) | (3) | (4) |
IE 8 | 551 | 911 | 741 | 1692 |
IE 7 | 991 | 1692 | 1242 | 2855 |
IE 6 | 561 | 1322 | 762 | 2364 |
Firefox 3.6 | 160 | 248 | 369 | 487 |
Firefox 3.5 | 182 | 448 | 555 | 994 |
Chrome 4 | 123 | 373 | 397 | 1032 |
Safari 4 | 185 | 246 | 356 | 484 |
Opera 10 | 3174 | 781 | 8642 | 1882 |
トラックバック - http://d.hatena.ne.jp/a_bicky/20100508/1273309542
リンク元
- 10 http://pipes.yahoo.com/pipes/pipe.info?_id=3572f9da2c8db3951cc02c59f68f43ba
- 9 http://pipes.yahoo.com/pipes/pipe.info?_id=0kJqAOKW3RGniq6n1ZzWFw
- 5 http://search.minakoe.jp/rsss/rsss.asp?ics=euc&qry=firefox&multi=1
- 2 http://reader.livedoor.com/reader/
- 2 http://www.google.co.jp/search?q=pukiwiki+latex&hl=ja&start=10&sa=N
- 1 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/a_bicky/20100508/1273309542
- 1 http://bit.ly/b1PpS7
- 1 http://d.hatena.ne.jp/yuyakko/20100503/1272879683
- 1 http://mixi.jp/recent_voice.pl
- 1 http://pipes.yahoo.com/pipes/pipe.info?_id=02db597254ec68550537866a2fca2ce6