我在一个字符串中放置一个RegExp模式有一个小问题,我有2个模式都是真的相同。第一个不起作用我假设由于\ d - 它被视为转义字符吗?
var pattern = '^.{1,5}-\d{1,5}$'; // Doesn't work
var pattern = '^[a-zA-Z]{1,5}-[0-9]{1,5}$'; // Works
这周围有吗?除了用[0-9]替换\ d?
以下是我正在使用的额外代码
var regex = new RegExp(pattern);
var result = regex.test(value);
提前致谢
答案 0 :(得分:2)
作为found in the documentation,您有几种不同的方式来创建RegExp
正则表达式文字,
var regex = /^.{1,5}-\d{1,5}$/;
RegExp对象的构造函数
var regex = new RegExp("^.{1,5}-\\d{1,5}$");
因为它是一个字符串,你需要转义任何\
同样适用于\ w和其他背面的字符
如果您需要添加到regexp
的变量,则主要使用第二个版本答案 1 :(得分:1)
如果你希望你正在编写正则表达式的方式,你可以双重逃避d
:
var pattern = '^.{1,5}-\\d{1,5}$'; // Should work
var regex = new RegExp(pattern);
否则,您可以使用分隔符/
直接使用正则表达式:
var pattern = /^.{1,5}-\d{1,5}$/;
在第一个实例中,您将模式存储在字符串中,并且传递给变量的实际字符为:^.{1,5}-\d{1,5}$
,因为\d
在字符串中没有意义,但{ {1}}是反斜杠和文字\\d
。您可以尝试在字符串中添加反斜杠:
d
因此,如果你的意思是字面反斜杠,你必须逃避它。
使用:
console.log('\'); // Won't run
console.log(' \ '); // Returns a space
console.log('\n'); // Returns a newline character
应该更快,如果您多次使用正则表达式,因为在这里,您正在编译正则表达式,以便您可以多次使用它。
另一种方法需要在每次调用时编译正则表达式。