胡子哥哥
2019-05-25 15:13:17
為什么正則表達式構造函數需要雙重轉義?在下面的正則表達式中,\s表示空格字符。我想象正則表達式解析器,正在通過字符串看到\并知道下一個字符是特殊的。但事實并非如此,因為需要雙重逃脫。為什么是這樣?var res = new RegExp('(\\s|^)' + foo).test(moo);是否有一個具體的例子說明單個逃避如何被誤解為其他東西?
4 回答

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
在那里你要創建一個字符串的代碼里面,反斜杠是一個JavaScript轉義字符第一,這意味著像轉義序列\t
,\n
,\"
,等將被翻譯成其JavaScript對口(制表符,換行符,報價等),和這將成為字符串的一部分。雙反斜杠表示實際字符串本身中的單個反斜杠,因此如果您想在字符串中使用反斜杠,則首先將其轉義。
所以當你通過說出你生成一個字符串時var someString = '(\\s|^)'
,你真正在做的是創建一個帶有值的實際字符串(\s|^)
。

慕妹3146593
TA貢獻1820條經驗 獲得超9個贊
\在字符串中用于轉義特殊字符。如果你想在字符串中使用反斜杠(例如對于\ in \ s),你必須通過反斜杠轉義它。所以\成為\\。
編輯:甚至不得不在這里做,因為\\在我的回答中轉向\。

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
正則表達式需要一個字符串表示\s
,在JavaScript中可以使用文字生成"\\s"
。
這是一個現實的例子來說明為什么"\s"
還不夠:
alert("One backslash: \s\nDouble backslashes: \\s");
添加回答
舉報
0/150
提交
取消