javascript - Javascript 正则表达式文字和构造函数之间的差异

标签 javascript regex

我们最近遇到了一个错误,一位开发人员将 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"]

不用说,我恢复了更改,但我想知道为什么会有这样的差异。

最佳答案

有两个问题:

/ 不是表达式的一部分。它们是分隔符,标记正则表达式文字。如果您使用 RegExp,则必须删除它们,否则它们会按字面意思匹配斜杠。

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

因此,等价物是:

new RegExp("rt:([^@]+)@(\\d+)")
<小时/>

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

关于javascript - Javascript 正则表达式文字和构造函数之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7964916/

相关文章:

C# 正则表达式验证程序验证

c# - 如何匹配一个字符串,但前提是同一字符串尚未匹配或不匹配破折号?

php - 当第一个表中存在特殊字符时,MySQL SELECT 然后保存或更新到不同的表。 left_my_text_alone();

javascript - 函数未在 setTimeout 内执行

javascript - 如何制作与计时器一起使用的交互式向后进度条?

javascript - Twitter 提前输入突出显示选择

javascript - 顺序改变两个状态会抛出错误

javascript - LinkedIn 共享代码中“&source=”等号后面放什么?

javascript - 正则表达式 - 检测并替换字符串中两个以上的数字

javascript - 为什么正则表达式匹配很慢?