JavaScript的URL搜索正则表达式
我有一个奇怪的问题正则表达式字符串替换在JavaScript中。我有这样的正则表达式中可以包含多个网址(评论或交的,比如)一个要搜索的字符串的URL:JavaScript的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;
}
有人知道我在这里做错了什么?
编辑:它看起来像有什么有趣的事情与我的数据导致的问题。
试试这个,
str.replace(/(https?\:\/\/[^\s]+)/gi, '<a href="$1" target="_blank">$1</a>');
如果你只是想匹配的列表,您可以尝试使用String.match
而非RegExp.exec
。
它可以简化getMatches
到:
function getMatches(re, str) {
var matches = str.match(re);
return matches == null ? [] : matches;
}
或可能让你放弃它:
var matches = str.match(/(?:https?:\/\/|www\.)\S+/gi) || [];
你可能也想签之类的工具RegexPal快速测试模式,such as yours。
实际上,使用g标志处理正则表达式时需要它。每次连续的exec调用都会为每个匹配返回一个结果数组(匹配,然后是每个捕获的括号),因此您必须查看直到它返回null以获得每个匹配。 – coreyschram 2012-07-24 18:51:01
@coreyschram啊。抱歉。我正在考虑['match'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/match),它使用全局标志将返回字符串中的所有匹配项。 – 2012-07-24 18:58:26
我的错误,我实际上使用它,只是在问题中输入错误。固定。 – coreyschram 2012-07-23 23:15:15