使用对象属性构造正则表达式时,限定符无效

Invalid quantifier when using an object property to construct a regex

本文关键字:无效 正则表达式 对象 属性      更新时间:2023-09-26

我正试图从对象属性动态构建一个简单的正则表达式。

var type = 'bold';
var styles = {
    "bold italic" : "***",
    "bold"        : "**",
    "italic"      : "*"
};
var re = new RegExp(styles[type], 'g');

但是,我返回了一个无效的量词错误。

如果我把变量放在引号里,就像这样:

var re = new RegExp('"' + styles[type] + '"', "g");

type == 'italic'而不是'bold' 时,它工作正常

有人能解释为什么会这样,并提供解决方案吗?

在正则表达式中,字符*是一个量词。表达式:

a*

意味着a零次或更多次a也可以是一个表达式)。

当你试图匹配*本身而不将其用作量词时,你应该转义它:

var styles = {
    "bold italic" : "''*''*''*",
    "bold"        : "''*''*",
    "italic"      : "''*"
};