RegExpは、初期のJavaScriptでは存在しませんし、
ユーザが定義できるようなものではありませんから、
互換性のためにはこのオブジェクトの使用は控えたほうがいいでしょう。
多くの場合、普通の文字列検索などで代替できるはずです。
String.match()やRegExpの第1引数に
正規表現を渡すことができますが、
このクオートとして/を使うのはやめたほうがいいでしょう。
つまり、Perlやsedなどでおなじみの以下の形式は避けるということです。
/.../
古いブラウザはその形式を正しく解釈できない可能性があります。 たとえばNN3.01は、もしその形式の記述があれば文法エラーとして、 それ以降のJavaScript文を正しく実行しません。
この危険性は、
正規表現を"(ダブルクオート)で囲んだ文字列として
記述すれば回避できます。
こうしておけば、たとえ古いブラウザが正規表現を知らなかったとしても、
JavaScriptの文としては誤った解釈をしなくなります。
ただし、そうする場合、単純に正規表現をダブルクオートで囲んだだけでは
正しい正規表現として解釈されません。以下のような注意が必要です。
/で囲む必要はありません。
/でクオートしないのだから、
正規表現中の/をエスケープする必要はありません。
\はエスケープする必要があります。
iなど)は、
前述の関数/コンストラクタの第2引数で渡します。
たとえば次の表のようになります。
| 例1 | 例2 | |
|---|---|---|
| もとの正規表現 | /^\/([^\/]*)\// | /^\/[A-Z]:\\/i |
| 変換された文字列 | "^/([^/]*)/" | "^/[A-Z]:\\\\","i" |
とはいっても、正規表現の数多い利点が使えないのは非常に残念。 とくにPerl使いにとっては。(T_T)
とくにこの2つがないと、 スクリプトのコードが無駄に増えがちになるときがあります。。。