4

URLのリスト内の数字で終わるすべての「act」に一致する次の正規表現パターンがあります。

正規表現パターン/\/ch(\d+)\/act(\d+)/gi

Javascriptコード

pageSrc[1] = "../ch01/index.html";
pageSrc[2] = "../ch01/act01/1.html";
pageSrc[3] = "../ch01/act01/2.html";
pageSrc[4] = "../ch01/act02/1.html";
pageSrc[5] = "../ch01/act02/2.html";
pageSrc[6] = "../ch01/actx/1.html";

var pattern = /\/ch(\d+)\/act(\d+)/gi;
for(var i=0; i<pageSrc.length; ++i){
  var hasAct = pattern.test(pageSrc[i]);
  console.log(hasAct);
}

期待される結果と実際の結果

|   String   | Expected Result |   Actual Result  |
| pageSrc[1] |       false     |     false        |
| pageSrc[2] |       true      |     true         |
| pageSrc[3] |       true      |     *FALSE       |
| pageSrc[4] |       true      |     true         |
| pageSrc[5] |       true      |     *FALSE       |
| pageSrc[6] |       false     |     false        |

なぜpageSrc[3]戻らないのかわからないtrue。gskinner.comでregExテスターを使用しましたが、正常に機能しました。リンクはhttp://gskinner.com/RegExr/?344apです。

誰かが私が見てみるのを手伝ってもらえますか?前もって感謝します!

4

2 に答える 2

3

を使用して/gいます。そのフラグを削除して機能させます。

このgフラグにより​​、正規表現はpattern.lastIndex(前の一致が終了したインデックス)から失敗するまで一致を開始し、その後0から開始します。

于 2013-03-14T04:55:38.527 に答える
3

gフラグを削除します。ドキュメントからRegExp.test

と同様にexec(またはそれと組み合わせて)、test同じグローバル正規表現インスタンスで複数回呼び出されると、前の一致を超えて進みます。

このようなパターンを再利用する場合、グローバル検索は必要ありません。

> var pageSrc = [];
> pageSrc[1] = "../ch01/index.html";
  pageSrc[2] = "../ch01/act01/1.html";
  pageSrc[3] = "../ch01/act01/2.html";
  pageSrc[4] = "../ch01/act02/1.html";
  pageSrc[5] = "../ch01/act02/2.html";
  pageSrc[6] = "../ch01/actx/1.html";

  var pattern = /\/ch(\d+)\/act(\d+)/i;
  for(var i=0; i<pageSrc.length; ++i){
    var hasAct = pattern.test(pageSrc[i]);
    console.log(i, hasAct);
  }
  0 false
  1 false
  2 true
  3 true
  4 true
  5 true
  6 false
于 2013-03-14T04:56:54.760 に答える