我试图找出一个字符串是否包含带有此表达式的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中运行,对吧?
答案 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来证明这一点,但我建议您找到解决问题的不同解决方案。这是一个非常简单的正则表达式,并不能说它是可靠的。