javascript中的正则表达式无效

时间:2012-01-29 17:12:28

标签: javascript jquery css

我试图找出一个字符串是否包含带有此表达式的css代码:

var pattern = new RegExp('\s(?[a-zA-Z-]+)\s[:]{1}\s*(?[a-zA-Z0-9\s.#]+)[;]{1}');

但我得到了#34;正则表达式无效"上面的错误......

它有什么问题?

在这里找到了正则表达式:http://www.catswhocode.com/blog/10-regular-expressions-for-efficient-web-development

它适用于PHP但它也应该在javascript中运行,对吧?

4 个答案:

答案 0 :(得分:3)

两个?块开头的[a-zA-z-]是什么?他们看起来不对劲。

遗憾的是,?在regexp语法中有些过载,它可以有三种我所知的不同含义,并且它们都不匹配我在示例中看到的含义。

此外,您的\s序列需要反斜杠转义,因为这是一个字符串 - 它们应该看起来像\\s。为避免转义,只需使用/.../语法而不是new Regexp("...")

即便如此,即使这还不够 - 正则表达式仍会在Chrome中产生Invalid Group错误,可能与{1}序列有关。

答案 1 :(得分:2)

/(斜杠)替换引号:

var pattern = /\s([a-zA-Z-]+)\s[:]{1}\s*([a-zA-Z0-9\s.#]+)[;]{1}/;

你也不需要new RegExp()部分,这就是它被移除的原因; JavaScript不是使用引号或双引号来表示字符串,而是使用斜杠/来表示正则表达式,这不是普通字符串。

答案 2 :(得分:2)

?正在弄乱它。我不确定它们的用途。

/\s[a-zA-Z\-]+\s*:\s*[a-zA-Z0-9\s.#]+;/

为我工作(就编译而言。我没有测试它是否正确检测到CSS字符串)。

答案 3 :(得分:1)

这个正则表达非常糟糕,我将来会避免它的来源。也就是说,我清理了一下并得到了以下结果:

var pattern = /\s(?:[a-zA-Z-]+)\s*:\s*(?:[^;\n\r]+);/;

这匹配看起来像css的东西,例如:

background-color: red;

这是the fiddle来证明这一点,但我建议您找到解决问题的不同解决方案。这是一个非常简单的正则表达式,并不能说它是可靠的。