0

我是 Javascript 的初学者,并且正在玩正则表达式。

我试图执行一些匹配操作,但结果相当混乱。

我要做的就是匹配每个网站名称:

“我去 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 回答