我有一些正则表达式的问题,无法从文本中获取 url,并通过函数再次修改替换字符串中的所有匹配项。下面的代码是我想要做的一个虚拟示例。这样的事情可能吗?
var exp = /\b((http:\/\/|https:\/\/)[\S]*)/g;
text = text.replace(exp, "<a href=\"$1\" title=\""+parseUri("$1").host+"\"></a>");
我有一些正则表达式的问题,无法从文本中获取 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
是一个断言,所以不会消耗任何文本。