2016-07-05 118 views
0

偶然發現了這一點,不知道是什麼原因。JavaScript RegExp:爲什麼會導致雙反斜槓(\)出錯?

// Results in "Syntax error in regular Expression". 
var re = RegExp('\\'); 

我知道構造函數函數需要一個字符串作爲參數。並且反斜槓在字符串中用於轉義具有特殊含義的字符。我知道我必須將\ d這樣的字符轉義爲\\ d。

因此:正確的反斜槓應該被解釋爲一些正常的字符。

反而會引發錯誤。爲什麼?

任何人都可以解釋這一點嗎?

+0

因爲'/ \ /'是一個無效的正則表達式。如果你想要一個正則表達式來匹配一個反斜槓,你需要'/ \\ /'或'new RegExp('\\\\')' – Phil

回答

2

我相信你收到此錯誤的原因是您正在輸入JavaScript引擎的有效正則表達式是單個反斜槓\

原因是第一個反斜槓轉義第二個。所以你正在放置一個字面反斜槓,這沒有任何意義。

+1

你是對的。 「var test1 ='\';」反斜槓轉義第二個撇號。所以字符串沒有結尾符號,並且是無效的。類似的東西不能存在。最短的字符串只包含反斜槓,即「var test2 ='\\'」。因此,搜索test1的RegExp是沒有意義的。謝謝您的幫助。你給了正確的輸入。 –

3

字符串字面值'\\'創建一個字符串,其中只包含一個反斜槓字符,因爲在字符串文字中反斜槓是一個轉義字符。

單個反斜槓字符不是有效的正則表達式。

如果您希望相匹配的正則表達式話單反斜線需要進行正則表達式中逃脫,所以你需要做的要麼:

re = /\\/; 
// or 
re = new RegExp('\\\\'); 
1

\用於逃避\的字符串,所以得到\d如您所寫,你需要做\\d

同樣在正則表達式中,您需要跳過\\\

所以你有兩個需要在正則表達式中使用的轉義語法,使用一個\\意味着\在regexp中是不正確的,因爲它需要被轉義。

所以要解決這個問題,你需要雙重轉義:\\\\ - 這將是一個正則表達式尋找\

0

反斜槓\是正則表達式的轉義字符。因此,雙反斜槓確實意味着單個反斜槓。 \(反斜槓),後跟任何[\^$。 ?* +(){}轉義特殊字符來抑制其特殊含義。

相關問題