我有一个字符串,其中可能包含双引号。我知道我可以通过替换"用\"像:
myString.value.replace(/\"/g, "\\\"");
但这样做可能会产生另一个问题,即如果某些双引号已被转义。例如,如果我已经有了"在我的字符串中,运行它会将其更改为\"这是我不想要的东西。
有没有办法忽略已经转义过的双引号,只替换那些不引用的双引号?
答案 0 :(得分:2)
您可以使用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"
答案 1 :(得分:0)
实际上,在字符串中转义引号的问题有一个内置的解决方案,因此您不需要自己实现解析器。只需使用JSON.stringify
:)
你会得到的是你的字符串,正确地使用引号和反斜杠,并在其周围加上双引号,你可能想要或不想修剪它。
JSON.stringify("\\\"")
=> "\"\\\"\""
答案 2 :(得分:-1)
所以只能转义未转义的引号:
myString.value.replace(/[^\\]\"/g, "\\\"");