这是一段简短的代码:
var utility = {
escapeQuotes: function(string) {
return string.replace(new RegExp('"', 'g'),'\\"');
},
unescapeQuotes: function(string) {
return string.replace(new RegExp('\\"', 'g'),'"');
}
};
var a = 'hi "';
var b = utility.escapeQuotes(a);
var c = utility.unescapeQuotes(b);
console.log(b + ' | ' + c);
我本以为这段代码能够正常工作,但是实际上却出现了以下错误:
hi \" | hi \"
如果我将unescapeQuotes方法中new RegExp构造函数的第一个参数改为4个反斜杠,那么一切都会按照预期工作。
string.replace(new RegExp('\\\\"', 'g'),'"');
结果如下:
hi \" | hi "
为什么在使用new RegExp构造函数作为第一个参数时需要使用四个反斜杠?为什么只使用两个反斜杠不行?
/\\"/g
而不是new RegExp('\\"', 'g')
,以避免由构造函数引起的意外奇怪字符串解释(和返回值不正确)。 - Derek 朕會功夫