2014年1月24日金曜日

JavaScript: RegExp の中で \ や ¥ は2回書く

JavaScript の正規表現オブジェクトでは、
正規表現で予約されている記号を \  や ¥ でエスケープする必要があります。
var regEscape = /y\.okano/;
var regNoEscape = /y.okano/;
var name = 'y_okano';

console.log(regEscape.test(name));  // false
console.log(regNoEscape.text(name));  // true: . が _ とマッチ

上のコードのようにリテラルで生成する場合は問題無いですが、
以下のコードのようにコンストラクタから生成する場合は、
引数として渡す文字列の中で \ や ¥ がエスケープ文字として処理されるので、
文字列としてのエスケープ用と、正規表現としてのエスケープ用に、
\ や ¥ を2回連続で書く必要があります。
var regEscape = new RegExp('y\\.okano'); // => /y\.okano/ と同じ
var regNoEscape = new RegExp('y\.okano'); // => /y.okano/ と同じ

console.log(regEscape.test(name));  // false
console.log(regNoEscape.text(name));  // true


RegExp についてはこちら
RegExp - Mozilla Developer Network
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp

0 件のコメント:

コメントを投稿