2017-02-21 52 views
1

我正在转换我写入JavaScript的python脚本。我的Python脚本具有以下的正则表达式匹配的“\”单实例:解决方法为javascript中的负面后顾

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

我想在JS运行此当编译器错误:

"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

这将帮助我匹配它们,但不一定会用实际反斜杠替换转义字符,对吧? – Fruitspunchsamurai

+0

@Fruitspunchsamurai你可以在替换时检查这个,检查编辑 –

0

只需匹配没有断言(^|[^\\])\\([^\\]|$)然后将它们替换回来。
请注意,这不会告诉你它是否逃避任何事情。
正则表达式更复杂。

+0
+0

是的,找到'/(^ | [^ \\])\\([^ \\] | $)/ g',替换'“$ 1 \\\\ $ 2”'。什么部分令人困惑? – sln