匹配字符串中的复杂URL以进行替换

时间:2016-03-04 16:48:23

标签: javascript regex

我有一个长字符串,基本上包含页面的整个HTML代码。

此页面中有链接,我需要在这些链接的末尾添加一组参数。

Nb:所有href在所有页面中都是相同的。

我设法用这段代码提取变量中的URL(html var包含我的html代码):

var href = html.match(/href="([^"]*)/)[1];

添加额外参数:

var newHref = href+'&n=$ln$&p=$fn$&e=$e$';

我使用此函数转义第一个href用于regexp目的:

function escapeRegExp(str) {
    return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|\=\%\:\&]/g,"\\$&");
}

然后我尝试在代码中执行替换:

var reCompletion = new RegExp(escapeRegExp(href),"g");
html.replace(reCompletion, newHref);

当我运行此代码时,它找不到与URL的任何匹配,并且根本不执行任何替换。

以下是我必须填写的网址:

http://action.mySite.com/trk.php?mclic=P4CAB9542D7F151&urlrv=http%3A%2F%2Fjeu-centerparcs.com%2F%23%21%2F%3Fidfrom%3D8&urlv=517b975385e89dfb8b9689e6c2b4b93d

一旦转义:

http\:\/\/action\.mySite\.com\/trk\.php\?mclic\=P4CAB9542D7F151\&urlrv\=http\%3A\%2F\%2Fjeu\-centerparcs\.com\%2F\%23\%21\%2F\%3Fidfrom\%3D8\&urlv\=517b975385e89dfb8b9689e6c2b4b93d

有没有人对此有任何线索?

1 个答案:

答案 0 :(得分:1)

问题在于替换部分中的$符号:美元必须加倍才能替换为1 $

var newHref = (href+'&n=$ln$&p=$fn$&e=$e$').replace(/\$/g, '$$$$');

另外,从escapeRegExp删除不必要的转义符号:

function escapeRegExp(str) {
    return str.replace(/[-[\]\/{}()*+?.\\^$|=%:&]/g,"\\$&");
}

这是一个片段:

var html = "More here http://action.mySite.com/trk.php?mclic=P4CAB9542D7F151&urlrv=http%3A%2F%2Fjeu-centerparcs.com%2F%23%21%2F%3Fidfrom%3D8&urlv=517b975385e89dfb8b9689e6c2b4b93d text<br/>And more here http://action.mySite.com/trk.php?mclic=P4CAB9542D7F151&urlrv=http%3A%2F%2Fjeu-centerparcs.com%2F%23%21%2F%3Fidfrom%3D8&urlv=517b975385e89dfb8b9689e6c2b4b93d";
var href = "http://action.mySite.com/trk.php?mclic=P4CAB9542D7F151&urlrv=http%3A%2F%2Fjeu-centerparcs.com%2F%23%21%2F%3Fidfrom%3D8&urlv=517b975385e89dfb8b9689e6c2b4b93d";
var newHref = (href+'&n=$ln$&p=$fn$&e=$e$').replace(/\$/g, '$$$$');
function escapeRegExp(str) {
    return str.replace(/[-[\]\/{}()*+?.\\^$|=%:&]/g,"\\$&");
}
var reCompletion = new RegExp(escapeRegExp(href),"g");
html = html.replace(reCompletion, newHref);
document.body.innerHTML = html;