柔軟に働き方を選ぶ時代に必要なこと >>

FireFox3から、正規表現にstickyフラグなるものが追加されました。この有用性がわかりません。
MDNではサンプルが示されていますが、そのサンプルのフラグを「g」フラグに書き換えても挙動は全く同じであり、有用性の説明にはなっていないものと思われます。仮に正規表現のパターンが「/^(\S+) line\n?/」だったとしても「mg」フラグ時と変わりません。

yフラグはmgフラグ指定時と全く同じなのでしょうか。違う部分があるのでしょうか?もし違う部分があるのならyフラグの意味や、mgフラグとの違い・有用性がわかるサンプルを教えてください。

よろしくお願いします。


RegExp - JavaScript | MDN
https://developer.mozilla.org/ja/docs/JavaScript …

var text = "First line\nsecond line";
var regex = /(\S+) line\n?/y;

var match = regex.exec(text);
console.log(match[1]); // "First" を出力します
console.log(regex.lastIndex); // 11 を出力します

var match2 = regex.exec(text);
console.log(match2[1]); // "Second" を出力します
console.log(regex.lastIndex); // "22" を出力します

var match3 = regex.exec(text);
console.log(match3 === null); // "true" を出力します

※「print」は明らかなミスだと思われるため「console.log」に書き換えています。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

ヘルプを眺めながら試してみました。


その結果、yフラグとmgフラグとで「^」の解釈に違いがあることがわかりました。


var text = "a1a2a3a4a5\na6a7a8a9a0";
var regex = /^a[0-9]\n?/y;

while(true){
  var match = regex.exec(text);
  if(match === null){
   console.log("End");
   break;
  }

  for(var i=0; i < match.length; i++){
   console.log(i + ":" + match[i]);
  }
}

yフラグでの実行結果:
0:a1
0:a2
0:a3
0:a4
0:a5
0:a6
0:a7
0:a8
0:a9
0:a0
End
→「^」は行頭、または検索の開始位置とマッチ

mgフラグでの実行結果:
0:a1
0:a6
End
→「^」はあくまでも行頭とマッチ

構文解析を行うのに便利そうです。
    • good
    • 0
この回答へのお礼

「^」の意味が変わるのがポイントですね。文章にするとわかりにくいですけど、(正しい)サンプルなら理解しやすかったです。

MDNの「^」がないサンプルは、ほとんど理解していない人が間違って作ったのでしょうね。

勉強になりました。ありがとうございました。

お礼日時:2013/04/18 19:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング