0

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

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

1 回答 1

1

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

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

(注意这$0只是一个变量名,你可以不同的命名)。

检查String.replaceMDN 上的文档以了解替换函数参数的含义。第一个参数是整个正则表达式捕获的文本。然后接下来的 N 个参数是正则表达式中 N 个捕获组捕获的文本。

我也冒昧地重写了正则表达式。因为\b是一个断言,所以不会消耗任何文本。

于 2013-03-24T14:01:17.800 回答