То, что у меня есть, едва ли лучше, но оно также обрабатывает экранированные обратные слэши:
>>> var v= 'a\\"b'
>>> v
"a\"b"
>>> v.replace(/(\\*)(")/g, function(x) { var l = x.length; return (l % 2) ? x : x.substring(0,l-1) + '\\"' } )
"a\\"b"
>>> var v= 'a\\\\"b'
>>> v
"a\\"b"
>>> v.replace(/(\\*)(")/g, function(x) { var l = x.length; return (l % 2) ? x : x.substring(0,l-1) + '\\"' } )
"a\\"b"
Если перед цитатой есть нечетное количество слэшей (1, 3, 5) цитата уже экранирована;четное число (включая ноль) при необходимости убегать.
Сложнее читать из-за необходимости экранирования косых черт на входе и неспособности колоризатора понять регулярное выражениевыражение ...
Конечно, вы, вероятно, даже не должны этого делать.Если у вас есть необработанная строка, и вам нужно что-то, что вы можете передать (например) eval
, рассмотрите $.toJSON
.