我有一个长字符串,基本上包含页面的整个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
有没有人对此有任何线索?
答案 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;