簡體   English   中英

Javascript RegExp和\\\\

[英]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對象時,需要兩次轉義:

  1. 第一個按String對象
  2. Regex Engine第二名

這是不需要的,因為您是直接使用/ and /構建正則表達式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM