0

我有以下表达式:^(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");   
4

3 回答 3

5

删除第二个反斜杠:

/^(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
于 2013-11-13T13:12:42.463 回答
1

使用RegExp时,正则表达式将被视为字符串。所以,你必须逃避\with \\/.../当您将它与表单一起使用时,不需要转义。因此,只需删除\.\\

console.log(/^(0|1)\1{1,}$/.test("000"));

输出

true
于 2013-11-13T13:12:51.443 回答
1

通过剥离\\1来尝试这个正则表达式\1

/^(0|1)\1+$/.test("000");

当您RegExp使用 String 构造对象时,您需要双重转义:

  1. 第一个由字符串对象
  2. 正则表达式引擎第二名

这里不需要,因为您直接使用构建正则表达式/ and /

于 2013-11-13T13:12:51.903 回答