Javascript regexp文字和构造函数之间的差异

Noa*_*Gal 21 javascript regex

在一位开发人员将RegExp文字改为构造函数调用后,我们最近遇到了一个错误,我想知道为什么会有任何差别.确切的代码是

var parts = new RegExp("/rt:([^@]+)@(\d+)/").exec(tag);
Run Code Online (Sandbox Code Playgroud)

与原来的

var parts = /rt:([^@]+)@(\d+)/.exec(tag);
Run Code Online (Sandbox Code Playgroud)

tag是,例如rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077,第一(童车)调用返回null,而第二个返回["rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077", "60C1C036-42FA-4073-B10B-1969BD2358FB", "00000000077"]

毋庸置疑,我恢复了这一变化,但我想知道为什么首先会出现这样的差异.

Fel*_*ing 38

有两个问题:

/表达的一部分.它们是分隔符,标志着正则表达式的字面意思.如果你使用它们必须删除RegExp它们,否则它们按字面意思匹配斜线.

其次,反斜杠是字符串文字中的转义字符.要\为表达式创建文字,您必须在字符串中对其进行转义.

因此,等价物将是:

new RegExp("rt:([^@]+)@(\\d+)")
Run Code Online (Sandbox Code Playgroud)

特别是如果要使用,转义使表达式更难写RegExp.实际上只有在想要动态创建表达式时才需要它,例如,如果要包含存储在变量中的文本.如果你有一个固定的表达式,文字/.../更容易编写,更简洁.