JavaScript Regex没有检测到

时间:2013-05-17 14:49:27

标签: javascript regex

我尝试创建一个与打开HTML标记匹配的正则表达式。

<\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)>

我想出的是什么。它在RegexPal.com中运行良好http://gyazo.com/cef34f653c4a3483a31394330455c0cf 但是一旦我尝试在JS(Chrome和Node)中的某些文本上使用它,就会发生这种情况:http://gyazo.com/0c938ee289c1632f3f576aaccda1f81e

规则定义如下:

var Rules = [
    new RegExp("<\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)/>"),
    new RegExp("<\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)>"),
    new RegExp("</\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)>")
];

和内容的定义如下:

var Content = "<!DOCTYPE HTML><html><head><title>derp</title></head><body><div class=\"derp\"><!--this is formatted terribly -->derp<br /></div></body></html>";

2 个答案:

答案 0 :(得分:2)

问题是如果你想使用RegExp(),你需要加倍\

 new RegExp("<\\w+((\\s+...

最好放弃RegExp并使用/regExp/

var Rules = [
    /<\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)/>/,
    /<\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)>"/,
    /</\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)>/
];

答案 1 :(得分:0)

在字符串中使用时,您需要将\转义为\\,否则您只是逃避后来发生的任何事情。

转义\个字符或使用/regex/语法定义正则表达式。