什么是仅替换双引号的最佳方法?

时间:2015-10-07 18:08:42

标签: javascript regex

我有一个字符串,其中可能包含双引号。我知道我可以通过替换"用\"像:

myString.value.replace(/\"/g, "\\\"");

但这样做可能会产生另一个问题,即如果某些双引号已被转义。例如,如果我已经有了"在我的字符串中,运行它会将其更改为\"这是我不想要的东西。

有没有办法忽略已经转义过的双引号,只替换那些不引用的双引号?

3 个答案:

答案 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, "\\\"");