我有一些正则表达式从文本中获取url并通过函数再次修改替换字符串中的所有匹配项的问题。 下面的代码是我想要做的虚拟示例。 这样的事情可能吗?
var exp = /\b((http:\/\/|https:\/\/)[\S]*)/g;
text = text.replace(exp, "<a href=\"$1\" title=\""+parseUri("$1").host+"\"></a>");
答案 0 :(得分:1)
为.replace
提供一个函数作为第二个参数:
var exp = /\bhttps?:\/\/[\S]*/g;
text = text.replace(exp, function ($0) {
return '<a href="' + $0 + '" title="' + parseUri($0).host + '"></a>'
});
(请注意$0
只是一个变量名,你可以用不同的名称命名。)
检查String.replace
's documentation on MDN以了解替换函数的参数含义。第一个参数是整个正则表达式的文本捕获。然后接下来的N个参数是正则表达式中N个捕获组捕获的文本。
我也冒昧地重写正则表达式。由于\b
是一个断言,因此不会消耗任何文本。