我有以下表达式:^(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,}$
.
为什么它只在我使用时才有效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
时,正则表达式将被视为字符串。所以,你必须逃避\
with \\
。/.../
当您将它与表单一起使用时,不需要转义。因此,只需删除\
.\\
console.log(/^(0|1)\1{1,}$/.test("000"));
输出
true
通过剥离\\1
来尝试这个正则表达式\1
:
/^(0|1)\1+$/.test("000");
当您RegExp
使用 String 构造对象时,您需要双重转义:
这里不需要,因为您直接使用构建正则表达式/ and /