如果将正则表达式传递给"RegExp"构造函数会发生什么?



假设我有以下正则表达式:

/hellosworld!/g

如果我将此正则表达式传递给RegExp构造函数,没有引号:

new RegExp(/hellosworld!/g)

它会返回包含/hellosworld!/g的正则表达式,例如:

//hellosworld!/g/

或它会返回原始的正则表达式?

根据MDN,以下表达式创建相同的正则表达式:

new RegExp("ab+c", "i");
new RegExp(/ab+c/, "i");

预期结果:

/ab+c/i

,如果您通过带有标志的正则义务,但在第二个参数中没有定义新标志,结果也将是相同的,例如:

new RegExp(/ab+c/i)

应返回相同的正则义务文字(/ab+c/i(,但是如果您确实指定了新的Regex标志(在第二个参数中(将删除所有现有标志。

new RegExp(/ab+c/i, "")
new RegExp(/ab+c/i, "g")
new RegExp(/ab+c/i, "m")

预期结果:

/ab+c/
/ab+c/g
/ab+c/m

字面符号是什么?

评估表达式时,字面符号提供了正则表达式的汇编。

我什么时候应该使用文字符号?

当正则表达式保持恒定时,请使用文字符号。例如,如果您使用文字符号来构建循环中使用的正则表达式,则不会在每次迭代中重新编译正则表达式。

构造函数函数有什么作用?

正则表达式对象的构造函数(例如,新RegExp('ab+c')(提供了正则表达式的运行时汇编。

我什么时候应该使用构造函数?

当您知道正则表达模式将在更改时,请使用构造函数函数,或者您不知道该模式并从其他来源(例如用户输入(获取它。

祝你好运。

最新更新