修改替换字符串内的正则表达式匹配

Modify regex matches inside the replacement string

本文关键字:正则表达式 替换 字符串 修改      更新时间:2023-09-26

我有一个问题,一些正则表达式从文本中抓取url,并通过函数再次修改替换字符串内的所有匹配。下面的代码是我想要做的一个虚拟示例。这样的事情可能发生吗?

var exp = /'b((http:'/'/|https:'/'/)['S]*)/g;
text = text.replace(exp, "<a href='"$1'" title='""+parseUri("$1").host+"'"></a>");

提供一个函数作为.replace的第二个参数:

var exp = /'bhttps?:'/'/['S]*/g;
text = text.replace(exp, function ($0) {
    return '<a href="' + $0 + '" title="' + parseUri($0).host + '"></a>'
});

(注意$0只是一个变量名,您可以对它进行不同的命名)。

查看String.replace在MDN上的文档,了解替换函数参数的含义。第一个参数是整个正则表达式捕获的文本。接下来的N个参数是正则表达式中N个捕获组捕获的文本。

我还冒昧地重写了正则表达式。由于'b是一个断言,因此不会使用任何文本。