string.matchをやめてregexp.testにしたほうがよいケース

今回想定するのは、アドレスに指定した文字列が含まれていたら・・のケース。

//このmatchの使い方はどうなんだろう
if(location.href.match(/chart\.php|chart_j\.php|chart_jlog\.php|chart_elog\.php/)){

あるパターンがある文字列内で見つかるかどうか調べたいときに、test メソッドを使ってください(似たメソッドとして、String.search メソッドがあります)。
test - MDC

と書いてあるしね。

//これを
if(location.href.match(/chart\.php|chart_j\.php|chart_jlog\.php|chart_elog\.php/)){

//↓こうする
if(/chart\.php|chart_j\.php|chart_jlog\.php|chart_elog\.php/.test(location.href)){


//これは間違い
if(location.href.match('chart.php'|'chart_j.php'|'chart_jlog.php'|'chart_elog.php')){


上で間違えたひとがやりたいように、エスケープがめんどくさいときはどうしたらいいんだろう。

if(location.href.match('chart.php') || location.href.match('chart_j.php') || location.href.match('chart_jlog.php') || location.href.match('chart_elog.php')){

こう? 素直にエスケープしたほうがいいね。(これも間違え、コメント参照


if文と正規表現で、ビット演算子の|と論理演算子の||の使い分けもごっちゃになりやすいので注意。

//これでも動くけど間違ってるよね?(正規表現的に)
if(/chart\.php||chart_j\.php||chart_jlog\.php||chart_elog\.php/.test(location.href)){

//こっちが正しいはず
if(/chart\.php|chart_j\.php|chart_jlog\.php|chart_elog\.php/.test(location.href)){

感想

今回のケースで具体的にどんなメリットがあるんだろう。文法的に正しいってだけかな。メモリ節約とか速度改善されるのかね。