2017-02-21 2 views
1

Я конвертирую скрипт python, который я написал в javascript. Мой питон скрипт имеет следующее регулярное выражение, чтобы соответствовать единичные экземпляры «\»:Обходной путь для отрицательного внешнего вида в javascript

re.sub(r'(?<!\\)(\\{1})(?!\\)', r'\\', word) 

я получил ошибку компиляции при попытке запустить это в ЯШ:

"Invalid regular expression: /(?<!\\)(\\{1})(?!\\)/: Invalid group" 

После некоторых поисков выяснилось, что регулярное выражение в js не поддерживает внешний вид.

Я смотрел на this answer и они использовали:

^(?!filename).+\.js 

в виде отрицательного заглядывая вперёд с самого начала строки, которая не помогает мне, как мне нужно изменить '\' к '\\' в любой точке Струна. Я не думаю, что это дублирующий вопрос, поскольку мой вопрос пытается определить, как избежать и сопоставить один и тот же символ в разных точках строки, в то время как связанный вопрос пытается избежать согласования определенной фразы.

Мне нужно сопоставить символы «\», которые не имеют «\» до или после них.

ответ

1

Вы всегда можете использовать захват группы вместо просмотра назад

string.match(/(^|[^\\])(\\{1})(?!\\)/)[2] 

let replaced = "a\\b\\\\".replace(/(^|[^\\])(\\{1})(?!\\)/, x => x[0] == '\\' ? x : 'value') 
 

 
console.log(replaced)

вернет вам то же самое, как (?<!\\)(\\{1})(?!\\)

+0

Это поможет мне сопоставить их, но не обязательно заменить escape-символы действительной обратной косой чертой, верно? – Fruitspunchsamurai

+0

@Fruitspunchsamurai вы можете проверить это при замене, проверить изменения –

0

Только матч без утверждений (^|[^\\])\\([^\\]|$) затем замените их обратно.
Обратите внимание, что это ничего не говорит о том, что оно ускользает от чего-либо или нет.
Это regex сложнее.

+0

Что вы имеете в виду на замену утверждения обратно? – Fruitspunchsamurai

+0

Да, найдите '/ (^ | [^ \\]) \\ ([^ \\] | $)/g', заменим' '$ 1 \\\\ $ 2" '. Какая часть сбивает с толку? – sln

Смежные вопросы