如果将正则表达式传递给“ RegExp”构造函数会怎样?

时间:2019-05-10 13:46:31

标签: javascript regex

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

/hello\sworld\!/g

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

new RegExp(/hello\sworld\!/g)

它将返回包含/hello\sworld\!/g的正则表达式,如下所示:

/\/hello\sworld\!\/\g/

还是会返回原始正则表达式?

1 个答案:

答案 0 :(得分:3)

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

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

预期结果:

/ab+c/i

如果您传递带有标志的正则表达式文字,但不在第二个参数中定义新标志,则结果也将相同,例如:

new RegExp(/ab+c/i)

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

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'))提供了正则表达式的运行时编译。

何时应使用构造函数?

  

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

祝你好运。