Javascript RegExp和\\

时间:2013-11-13 13:10:46

标签: javascript regex

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用RegExp时,正则表达式将被视为字符串。因此,您必须使用\转义\\。使用/.../形式时不需要转义。因此,只需删除\中的第二个\\

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

<强>输出

true

答案 2 :(得分:1)

通过将\\1解压缩到\1

来试用此正则表达式
/^(0|1)\1+$/.test("000");

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

  1. 1st by String object
  2. Regex Engine第二名
  3. 这里不需要,因为您使用/ and /

    直接构建正则表达式