0

我在将 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);

提前致谢

4

2 回答 2

2

文档中所述,您有几种不同的方法来创建 RegExp

正则表达式文字,

var regex = /^.{1,5}-\d{1,5}$/;

RegExp 对象的构造函数

var regex = new RegExp("^.{1,5}-\\d{1,5}$");

因为它是一个字符串,所以你需要转义任何 \

\w 和其他反斜杠字符相同

如果您需要将变量添加到正则表达式中,则主要使用第二个版本

于 2013-09-18T09:40:06.660 回答
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在字符串中没有意义,而是\\d反斜杠和文字d。您可以尝试在字符串中添加反斜杠:

console.log('\'); // Won't run
console.log(' \ '); // Returns a space
console.log('\n'); // Returns a newline character

因此,如果您的意思是文字反斜杠,则必须对其进行转义。

使用:

var pattern = '^.{1,5}-\\d{1,5}$'; // Should work
var regex = new RegExp(pattern);

但是,如果您多次使用正则表达式,应该会更快,因为在这里,您正在编译正则表达式,以便您可以多次使用它。

另一种方式将需要在每次调用时编译正则表达式。

于 2013-09-18T09:41:09.443 回答