0

我试图创建一个匹配打开 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>";
4

2 回答 2

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*)>/
];
于 2013-05-17T14:53:17.393 回答
0

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

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

于 2013-05-17T14:53:14.317 回答