Javascript 特殊字符导致JS替换出现问题
我有以下代码:Javascript 特殊字符导致JS替换出现问题,javascript,regex,Javascript,Regex,我有以下代码: var fileData = '<div name="test1"><h1>Test Div 1</h1></div><!-- Start: FindMe --><div name="findme"></div><!-- End: FindMe -->'; var findInDom = "<!-- Start: FindMe -->.*?<!-- End: Find
var fileData = '<div name="test1"><h1>Test Div 1</h1></div><!-- Start: FindMe --><div name="findme"></div><!-- End: FindMe -->';
var findInDom = "<!-- Start: FindMe -->.*?<!-- End: FindMe -->";
var result = fileData.replace(findInDom, "");
console.log(result);
我的正则表达式/替换:
var findInDom = "<!-- Start: FindMe -->.*?<!-- End: FindMe -->";
var findInDom=“*”;
我的带有变量的正则表达式:
var findInDom = /<!-- Start: " + name + " -->.*?<!-- End: " + name + " -->/;
var findInDom=/.*?/;
---名称是一个变量
你知道为什么不替换它吗?
findInDom
是一个字符串,但你把它当作正则表达式来处理
相反,您希望使用如下正则表达式:
var findInDom = /<!-- Start: FindMe -->.*?<!-- End: FindMe -->/;
var findInDom=/.*?/;
如果要将变量值插入正则表达式,请改用正则表达式构造函数:
var name = "FindMe";
var findInDom = "<!-- Start: " + name + " -->.*?<!-- End: " + name + " -->";
var regex = new RegExp(findInDom);
var result = fileData.replace(regex);
var name=“FindMe”;
var findInDom=“*”;
var regex=新的RegExp(findInDom);
var result=fileData.replace(regex);
findInDom
是一个字符串,但您将其视为正则表达式
相反,您希望使用如下正则表达式:
var findInDom = /<!-- Start: FindMe -->.*?<!-- End: FindMe -->/;
var findInDom=/.*?/;
如果要将变量值插入正则表达式,请改用正则表达式构造函数:
var name = "FindMe";
var findInDom = "<!-- Start: " + name + " -->.*?<!-- End: " + name + " -->";
var regex = new RegExp(findInDom);
var result = fileData.replace(regex);
var name=“FindMe”;
var findInDom=“*”;
var regex=新的RegExp(findInDom);
var result=fileData.replace(regex);
您正在使用字符串替换。请尝试fileData.replace(新的RegExp(findInDom,'g'),“”)
您正在使用字符串进行替换。尝试fileData.replace(新的RegExp(findInDom,'g'),“”)
Oops…我的坏消息。如果我想传入一个变量,那会发生什么呢?这就是为什么我要将它用作字符串的原因?你也应该使用它,并且使用Regex.escape(name)
而不是直接使用name
,以防name
包含在Regex中具有特殊含义的字符,例如,如果名称包含一个
.Oops…我的坏。如果我想传入一个变量,那会发生什么呢?这就是为什么我要将它用作字符串的原因。那么您也应该使用它,并使用Regex.escape(name)
而不是直接使用name
,以防name
包含在Regex中具有特殊含义的字符,例如如果name包含
。
var name = "FindMe";
var findInDom = "<!-- Start: " + name + " -->.*?<!-- End: " + name + " -->";
var regex = new RegExp(findInDom);
var result = fileData.replace(regex);