Javascript:转义 RegExp 字符串中的字符问题

Javascript: Escaping character issue in a string for RegExp?

本文关键字:字符 问题 字符串 转义 RegExp Javascript      更新时间:2023-09-26

我在字符串中放置正则表达式模式时遇到了一个小问题,我有 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);

提前致谢

如文档中所述,您有几种不同的方法来创建正则表达式

正则表达式文字,

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

正则表达式对象的构造函数

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

由于它是一个字符串,你需要转义任何 ''

与 ''w 和其他反斜杠字符相同

第二个版本主要用于需要添加到正则表达式中的变量

如果您希望编写正则表达式的方式工作,您可以双重转义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);
不过,如果您多次使用正则

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

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