我在 JavaScript 中替换正则表达式字符串时遇到了一个奇怪的问题。我有这个正则表达式来搜索可能包含多个 URL(例如评论或帖子)的字符串中的 URL:
/(?:https?:\/\/|www\.)\S+/gi
但是我遇到了一个问题,它只会匹配一个 URL……除非它不匹配。这是不稳定的,但通常它只会匹配一个 URL(不一定总是第一个)。取这个字符串:
"Test
http://google.com
http://google.com
http://google.com"
它只会匹配第一个http://google.com
实例。
最终目标是用链接替换 URL:
str = str.replace(/(?:https?:\/\/|www\.)\S+/gi, '<a href="$&" target="_blank">$&</a>');
我正在使用它来更好地了解匹配的内容和不匹配的内容:
function getMatches(re, str) {
var matches = [],
match;
while ((match = re.exec(str)) !== null) {
matches.push(match[0]);
}
return matches;
}
有人知道我在这里做错了什么吗?
编辑:看起来我的数据发生了一些有趣的事情导致了这个问题。