2017-02-21 12 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