简单的正则表达式问题

时间:2012-07-12 00:22:03

标签: javascript regex

我是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>");
}

我的结果:

  

匹配index:0

     

匹配输入:我去google.com搜索,到facebook.com分享   和yahoo.com发送电子邮件

     

匹配编号0:google.com

为什么它只匹配 google.com ,而不是其他网站?

2 个答案:

答案 0 :(得分:1)

来自MDN documentation

  

如果正则表达式使用“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>");
}

答案 1 :(得分:0)

我只是想提一下,即使你实际上并不打算替换任何东西,替换方法有时更适合迭代字符串。

以下是它如何适用于您的情况:

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

Live demo here