2

正規表現の配列を使用して、その配列を「exec」操作で反復するにはどうすればよいですか。次のようなさまざまな正規表現で配列を初期化しました。

var arrRegex = new Array(/(http:\/\/(?:.*)\/)/g, /(http:\/\/(?:.*)\/)/g);

これを行うforループを作成しました。

 for(i=0;i<arrRegex.length;i++){
     arrRegex[i].exec(somestring);
 }

問題は、これが機能していないようだということです。次のようにハードコードして使用したくありません。

  (/(http:\/\/(?:.*)\/)/g).exec(somestring);

配列オプションを使用する場合、「。exec」関数はnullを返します。ハードコードされたオプションを使用すると、必要に応じて一致が返されます。

4

2 に答える 2

2

exec()一致を返すので、それをキャプチャできるはずです。

somestring = 'http://stackoverflow.com/questions/11491489/iterate-through-regular-expression-array-in-javascript';
var arrRegex = new Array(/(http:\/\/(?:.*)\/)/g, /(http:\/\/(?:.*)\/)/g);
for (i = 0; i < arrRegex.length; i++) {
    match = arrRegex[i].exec(somestring);
}

matchは配列であり、次の構造を持っています。

{
    [0] = 'string matched by the regex'
    [1] = 'match from the first capturing group'
    [2] = 'match from the second capturing group'
    ... and so on
}

このjsFiddleを見てくださいhttp://jsfiddle.net/HHKs2/1/

の省略形としてのtest()代わりに使用することもできます。正規表現が文字列の一部と一致するかどうかに応じて、ブール変数を返します。exec()exec() != nulltest()

于 2012-07-15T11:46:31.670 に答える
1

おそらくやりたいことは、最初のグループをキャプチャすることです。

for(i=0;i<arrRegex.length;i++){
  var someotherstring = arrRegex[i].exec(somestring)[1];
  // do something with it ...
}

ところで:それは私の推測です、あなたが何をしようとしているのかわかりません。ただし、URLのホスト名を取得しようとしている場合は、を使用する必要があります/(http:\/\/(?:.?)\/)/g。後の疑問符.*は、前の数量詞(*)を貪欲にしません。

于 2012-07-15T11:54:26.143 に答える