如何使用基于原始sting的新字符串替换所有RegEx模式--JavaScript

时间:2017-07-03 15:04:19

标签: javascript regex string

在我的网站上,用户可以输入评论。如果此评论包含网址,我需要将此网址替换为此网址的链接 例如:
来自:

Hi guys, you can visit me website at: http://foo.com for more info

为:

Hi guys, you can visit me website at: <a href="http://foo.com">http://foo.com</a> for more info

我使用RegEx查找字符串中的所有URL,但如何使用基于当前URL的新字符串替换每个URL(RegEx模式)。

例如:

var urlRegEx = /(...)/g; // a very long regex pattern that matches urls
var staticText = "bla bla bla http://foo.bar bla bla bla";
var hyperText = staticText.replace(urlRegEx, "<a href='" + urlRegEx + "'/>" + urlRegEx + "</a>"); // This of course will not work!!! :-(

我正在寻找RegExs的解决方案。另外,是的,我知道我可以将RegEx.exec(staticText)[0]的值保存在循环内的新参数中并逐个替换它们,但是我可以这样做吗没有循环字符串???

2 个答案:

答案 0 :(得分:0)

您的模式被括号括起来,因为您想捕获它。要使用捕获的值,您必须使用$1

引用它
var urlRegEx = /(...)/g;
var staticText = "bla bla bla http://foo.bar bla bla bla";
var hyperText = staticText.replace(urlRegEx, "<a href='$1'/>$1</a>");
                                                       ^^   ^^

答案 1 :(得分:0)

var hyperText = staticText.replace(urlRegEx, "<a href='$0'/>$0</a>");

执行方法RegEx.protptype.exec(string)时,您将获得一个match对象(这是一个数组),其中包含与RegEx模式匹配的值。您可以使用$ i访问此数组的值i是匹配数组的索引。

因此,要访问匹配模式的竞争值,请访问0索引 - $ 0