我是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 ,而不是其他网站?
答案 0 :(得分:1)
如果正则表达式使用“
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);});