所以我有一个Regex解决方案来查找和替换内容,它通过查找开始和结束来工作,所以这两个:
var start = "/* Start: User One */", end = "/* End: User One */";
然后我有一个userCSS变量和一个newContent,newContent替换了userCSS中的所有内容。它的工作完全没有任何引用,但是当报价在混合中时,它就会破裂。
我觉得我需要逃避这些斜线,但我不太确定如何。
以下两个例子可以解释我正在努力解决的问题:
工作小提琴:https://jsfiddle.net/xxuqv30t/
打破引号(单引号和双引号):https://jsfiddle.net/samfahav/
添加background: url('/bg.jpg');
的示例打破了正则表达式。
我在寻找什么:如何使用我目前的Regex解决方案来逃避报价?
var quote = function(str) {
return str.replace(/([.?*+^$[\]/(){}|-])/g, "\\$1");
};
var re = new RegExp(quote(start) + "[^/]+" + quote(end));
var newCss = userCSS.replace(re, newContent);
我认为正则表达式正在寻找开始和结束,当它试图通过并点击报价时,它会退回并失败。
编辑:似乎斜线打破了它,而不是引号/括号。
答案 0 :(得分:0)
你正在逃避正则表达式中的反斜杠。
您目前有([.?*+^$[\]/(){}|-])
它应该是([.?*+^$[\]\/(){}|-])
。
没有转义反斜杠,正则表达式通过和错误导致它不是可接受的格式。