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

时间:2013-03-24 13:56:29

标签: javascript regex

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

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

1 个答案:

答案 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是一个断言,因此不会消耗任何文本。