假设我有以下正则表达式:
/hello\sworld\!/g
如果我将此正则表达式传递给RegExp
构造函数,且不带引号:
new RegExp(/hello\sworld\!/g)
它将返回包含/hello\sworld\!/g
的正则表达式,如下所示:
/\/hello\sworld\!\/\g/
还是会返回原始正则表达式?
答案 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')
)提供了正则表达式的运行时编译。
何时应使用构造函数?
当您知道正则表达式模式将要更改,或者您不知道该模式并从其他来源(例如用户输入)获取该模式时,请使用构造函数。
祝你好运。