0

私はJavascriptの初心者で、正規表現をいじっていました。

マッチング操作を実行しようとしましたが、結果はかなり混乱しています。

私がやろうとしているのは、すべてのWebサイト名を一致させることです:

「google.com で検索し、facebook.com で共有し、yahoo.com でメールを送信します。」

これが私のコードです:

var text = "I go to google.com to search, to facebook.com to share and to yahoo.com to send an email.";
var pattern = /\w+\.\w+/g;

var matches = pattern.exec(text);

document.write("matches index : " + matches.index + "<br>");
document.write("matches input : " + matches.input + "<br>");
document.write("<br>");
for(i=0 ; i<matches.length ; i++){
    document.write("match number " + i + " : " + matches[i] + "<br>");
}

そして私の結果:

一致するインデックス: 0

一致する入力: google.com にアクセスして検索し、facebook.com にアクセスして共有し、yahoo.com にアクセスしてメールを送信します。

一致番号 0 : google.com

google.comのみに一致し、他のウェブサイトには一致しないのはなぜですか?

4

2 に答える 2

1

MDN ドキュメントから:

正規表現で " g" フラグを使用している場合は、このexecメソッドを複数回使用して、同じ文字列で連続する一致を見つけることができます。これを行うとstr、正規表現のlastIndexプロパティで指定された の部分文字列から検索が開始されます (プロパティtestも進められlastIndexます)。

したがって、複数回実行するだけです。

var match, i = 0;
while(match = pattern.exec(text)) {
    document.write("match number " + (i++) + " : " + match[0] + "<br>");
}

または、キャプチャ グループがないため、次を使用します.match()

var matches = text.match(pattern);
for(i=0 ; i<matches.length ; i++){
    document.write("match number " + i + " : " + matches[i] + "<br>");
}
于 2012-07-12T00:37:53.237 に答える
0

実際には何も置換するつもりがない場合でも、replace メソッドが文字列を反復処理するのに適している場合があることを述べておきたいと思います。

あなたのケースでどのように機能するかは次のとおりです。

var matches = text.replace(pattern,function($0){alert($0);});

ライブデモはこちら

于 2012-07-12T01:08:02.180 に答える