2013-03-24 92 views
0

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

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

回答

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

+0

谢谢,我一直在寻找 – Bernhard 2013-03-24 14:42:23