我尝试创建一个与打开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>";
答案 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/
语法定义正则表达式。