无效的正则表达式`Javascript

时间:2013-07-12 15:37:09

标签: javascript html css regex

我正在尝试使用以下表达式解析CSS文件:

rulePatt = new RegExp("(?<=\\s)(?<!\\:\\s)#.*?\\{.*?\\}","gm");

它适用于我使用的两个不同的正则表达式测试程序,但是当我把它放在野外它会生成javascript错误:

Uncaught SyntaxError: Invalid regular expression: /(?<=\s)(?<!\:\s)#.*?\{.*?\}/: Invalid group

在这里弄清楚我正在努力实现的目标:http://jsfiddle.net/LoomyBear/44XtU/1/

我想我想念一些非常重要的东西。 请帮忙 ... 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用此模式

var regex = /(?:^|[^:])\s(#[^{]*\{[^}]*\})/gm;

您的结果位于第一个捕获组中。

说明:

(?:^|[^:])   # begining of the line or a character that is not a :
\s           # a white space
(#
[^{]*        # all characters expect { zero or more times
\{
[^}]*        # all characters expect } zero or more times
\})

第一个lookbehind (?<=\s)在锐利之前强加了一个空格,这就是为什么我之前写了一个\ s的原因。 第二个lookbehind (?<!:\s)在此空格之前禁止:,因此,在此位置不允许任何内容(即:行的开头)或不是: <的字符/ p>

答案 1 :(得分:1)

您可以使用内存组来模仿JavaScript中的后视,例如:

var patt1 = /(?:\}|$)\s*(#[^\{]+)/g,
    m;

while ((m = patt1.exec(parseStr)) !== null) {
    output += m[1] + '<br>';
}

Demo

首先匹配主题的开头或前一个定义的右括号,然后是可选的空格。其余的或多或少是你的原始表达。

要迭代每个匹配,您必须使用RegExp.exec()而不是$.each(),以便您可以选择要添加到output的内存组。