使用object属性构造正则表达式时无效的量词

时间:2013-08-20 21:13:47

标签: javascript regex

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

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'

时,它可以正常工作

任何人都可以解释为什么会这样,并提供修复吗?

1 个答案:

答案 0 :(得分:2)

在正则表达式中,char * is a quantifier。表达式:

a*

表示a 零次或多次a也可以是表达式)。

当您尝试匹配*本身并且不将其用作量词时,您应该逃避它:

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