JavaScriptで、変数を使った正規表現マッチング

例および失敗例は、自作のJavaScriptソースから抜粋。
※例ごとにマッチする文字列が違いますがご容赦ください。

 JavaScriptで正規表現を使う方法は2つあって、
 
 (1)正規表現を引数に与える
 例:
 空行あるいはコメントアウト(行頭が";")の場合にマッチするif文
   if(scinario_script[scriptLine].match(/^(\s*|\s*[;*].*)$/)){
 マッチした文字列をtarget[1]として取り出して使用する場合。
   if(target = name[1].match(/.*target\s*=\s*\*([^\s]+)/)){
 リテラルを変数に格納してもよいようです。
   var regex_linktag = /^\s*\[\s*link\s+([^\[]*)\[\s*endlink\s*\].*/;
   if(name = scinario_script[scriptLine].match(regex_linktag)){

 (2)正規表現オブジェクトを作って引数に与える
 例:
 一行目で、JavaScriptのlabel変数に格納した文字列とマッチさせる正規表現オブジェクトを作成。
   re_label = new RegExp ("\\s*"+label+"\\s*$");
   if (scinario_script[i].match(re_label)){



 このうち、正規表現を直接引数に指定する(1)のほうが書きやすいのですが、JavaScriptの変数を使った正規表現でマッチングをしたい場合は(2)を使う必要があるようです。

 ただし、(2)の正規表現は書き方に癖があります。(といってもスラッシュが2重になる程度ですが)
 ついでにいうと、正規表現オブジェクトの宣言ではvarは不要でした。

 失敗例:
       re_label = new RegExp ("^\s*\*"+label+"\s*$");

 JavaScriptでエラーを起こすと、エラー行でページ動作が止まります。
 検証にはブラウザをデバッグモードにする必要があります。
 chromeのデバッグモードで(Ctrl+Shift+iで入れる)正規表現に関連するエラーに引っかかると、「Uncaught SyntaxError: Invalid regular expression: (略) Nothing to repeat」などのエラーメッセージを拝むことになります。

chrome(chromium)によるエラー表示
エラーを起こしている正規表現部分はstackoverflow様より

0 件のコメント:

コメントを投稿

TIGORA(ティゴラ)のトレッキング シューズ

 TIGORA(ティゴラ)の トレッキング シューズを買いました。 メインの靴がアシックスウォーキングで街歩き用なのですが、これまではこれで高尾山などの軽い山も登っていました。 今回、靴底があまりに摩耗したこともあってアシックスウォーキングを買い替えたのですが、ついでに消耗が激...