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 件のコメント:

コメントを投稿

Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換する

 Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換することができるが、上手く変換されない場合がある。   以前作った魔法陣イラスト素材をイラスト素材ストックサイトへ登録しようと思い立ち、改めて素材用にラスタライズ変換をかけようとした。   ラスタライズ変換...