javascript - 正则表达式查找字符串中的 URL

标签 javascript regex

我使用正则表达式来查找字符串中的 URL,然后将它们转换为真正的 HTML 链接(在 JavaScript 中)。我的正则表达式的问题是它包含 http 之前的前一个字符。 (我说的是第一个数组中的第二个正则表达式。)

str = "testhttp://example.com";

search = new Array(
    /\[url\](.*?)\[\/url\]/ig,
    /(?:[^\]\/">]|^)((https?):\/\/[-A-ZÅÄÖ0-9+&@#\/%?=~_|!:,.;]*[-A-ZÅÄÖ0-9+&@#\/%=~_|])/ig
);

replace = new Array(
    '<a href="//$1">$1</a>',
    '<a href="$1">$1</a>'
);

for (i = 0; i < search.length; i++) {
    str = str.replace(search[i], replace[i]);
}

输出变为:

tes<a href="http://example.com">http://example.com</a>

但我希望它是:

test<a href="http://example.com">http://example.com</a>

重要的是,正则表达式应该找到 URL,即使它们位于字符串中的第一个,但如果前一个字符是以下三个字符之一,则不应找到它们:“/>

我对正则表达式很陌生。希望您能理解!

谢谢!

最佳答案

问题是that JavaScript will always replace the full match, not an inner capture group.

所以这里有一个巧妙的(并且经过测试的)技巧来缓解这个问题。进行您的第一个子模式捕获:

/([^\]\/">]|^)((https?):\/\/[-A-ZÅÄÖ0-9+&@#\/%?=~_|!:,.;]*[-A-ZÅÄÖ0-9+&@#\/%=~_|])/ig

然后明确包含它:

'$1<a href="$2">$2</a>'

关于javascript - 正则表达式查找字符串中的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12587892/

相关文章:

javascript - 大数组与小数组的对象

javascript - Angular 加载时间故障排除

javascript - jQuery - cat 未定义 - 无法解决

Javascript正则表达式匹配有界文本

javascript - clientWidth "lying",无法确定元素的实际宽度

javascript - JavaScript 中的 while 循环永远运行

python - 某些字符的正则表达式冲突 (ISO-8859-1 Windows-1252)

MySQL REGEXP 匹配两个空格或什么都不匹配

java - 当字符串具有管道和冒号字符而不转义时,正则表达式会失败什么?

java - 罗马数字的字符串替换