小编典典

Javascript regexp文字和构造函数之间的区别

javascript

在同一个开发人员将RegExp字面量更改为构造函数调用后,我们最近遇到了一个错误,我想知道为什么根本没有区别。确切的代码是

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

与原始的

var parts = /rt:([^@]+)@(\d+)/.exec(tag);

tag例如rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077,当为时,第一个(越野车)呼叫返回null,而第二个(返回)["rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077", "60C1C036-42FA-4073-B10B-1969BD2358FB", "00000000077"]

不用说,我撤消了更改,但是我想知道为什么首先会有如此不同。


阅读 270

收藏
2020-05-01

共1个答案

小编典典

有两个问题:

/ 表达的一部分。它们是 分隔符 ,标记了正则表达式文字。如果使用则必须将其删除RegExp,否则它们在字面上会匹配一个斜杠。

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

因此,等效项为:

new RegExp("rt:([^@]+)@(\\d+)")

如果要使用表达式,转义尤其会使表达式难以编写RegExp。实际上,仅当您要动态创建表达式时才需要它,也就是说,例如要包含存储在变量中的文本。如果您有固定的表达式,则文字/.../更容易编写且更简洁。

2020-05-01