我有以下表达式:^(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 :(得分: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
对象时,需要双重转义:
这里不需要,因为您使用/ and /