2015-09-24 93 views
1

標題總結了它。我遇到了在正則表達式文字和構造函數之間轉義的反斜槓奇怪的差異與new RegExp(),我很好奇它背後的東西。正則表達式構造函數和文字之間的反斜槓差異

我試圖逃跑括號(在構造函數中,像這樣:

var search = new RegExp('/(', 'g'); 
var result = "(test)".match(search); 

但這保持返回一個錯誤。比賽精細的工作文字/\(/g;裏面,但在構造函數中我最後不得不做這樣的事情:

search = new RegExp('\\(', 'g'); 

爲什麼一個轉義反斜槓需要轉義反斜線本身的構造可有人請向我解釋,但不是文字?

回答

3

由於反斜槓在正則表達式的上下文中和字符串文字的上下文中都是特殊字符。在正則表達式解析器可以看到它並應用其自己的特殊規則之前,必須先通過字符串文字的特殊用法。

+0

謝謝,保羅!這確實是有道理的。 – midofra

1

注意如果pattern是一個StringLiteral,則在RegExp處理該字符串之前執行通常的轉義序列替換。如果pattern必須包含要被RegExp識別的轉義序列,則必須在StringLiteral中轉義任何反斜槓\字符,以防止在StringLiteral內容形成時將其刪除。

http://www.ecma-international.org/ecma-262/5.1/#sec-15.10.4.1

相關問題