[英]Javascript RegExp and \\
我有以下表達式: ^(0|1)\\\\1{1,}$
。
為什么只有當我將它與new RegExp()
一起使用時,它才起作用?
// return always false
/^(0|1)\\1{1,}$/.test("000");
// it works!
var pattern = new RegExp("^(0|1)\\1{1,}$");
pattern.test("000");
刪除第二個反斜杠:
/^(0|1)\1{1,}$/.test("000"); // true
之所以可行,是因為反斜杠在正則表達式中按字面意義進行處理,而反斜杠在字符串中進行轉義(然后在正則表達式中再次進行轉義)。
例如:
new RegExp('\\\\').test('\\'); // true
/\\\\/.test('\\'); // false
new RegExp('\\\\').source; // '\\' - one backslash
/\\\\/.source; // '\\\\' - two backslashes
console.log('\\'); // shows one backslash
使用RegExp
,正則表達式將被視為字符串。 因此,您必須使用\\\\
轉義\\
。 當與/.../
窗體一起使用時,不需要轉義。 因此,只需刪除\\\\
中的第二個\\
。
console.log(/^(0|1)\1{1,}$/.test("000"));
輸出量
true
通過剝離試試這個正則表達式\\\\1
至\\1
:
/^(0|1)\1+$/.test("000");
使用字符串構造RegExp
對象時,需要兩次轉義:
這是不需要的,因為您是直接使用/ and /
構建正則表達式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.