我尝试创建一个与打开 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>";
最佳答案
问题是如果你想使用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*)>/
];
关于JavaScript 正则表达式未检测到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16611956/