我有一个字符串,其中可能包含双引号。我知道我可以通过将“替换为\”来转义字符串,例如:
myString.value.replace(/\"/g, "\\\"");
但是这样做会带来另一个问题,如果某些双引号已被转义。例如,如果我的字符串中已经有\“,运行此命令会将其更改为\”,这是我不希望的。
有没有办法忽略已经转义的双引号,而只替换那些没有的?
最佳答案
您可以将replace
与回调一起使用:
var s = s = 'abc "def" \\"foo bar\\" 123';
var r = s.replace(/(\\*)"/g, function($0, $1) {return ($1.length % 2) ? $0 : '\\' + $0; });
//=> abc \"def\" \"foo bar\" 123
更多测试:
> 'ab"c'.replace(/(\\*)"/g, function($0, $1) {return ($1.length % 2) ? $0 : '\\' + $0;});
"ab\"c"
> 'ab\\"c'.replace(/(\\*)"/g, function($0, $1) {return ($1.length % 2) ? $0 : '\\' + $0;});
"ab\"c"
> 'ab\\\\"c'.replace(/(\\*)"/g, function($0, $1) {return ($1.length % 2) ? $0 : '\\' + $0;});
"ab\\\"c"
> 'ab\\\\\\"c'.replace(/(\\*)"/g, function($0, $1) {return ($1.length % 2) ? $0 : '\\' + $0;});
"ab\\\"c"
> 'ab\\\\\\\\"c'.replace(/(\\*)"/g, function($0, $1) {return ($1.length % 2) ? $0 : '\\' + $0;});
"ab\\\\\"c"
关于javascript - 最好只替换一次双引号的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32999451/