const attribute = /^\s(1+)(?:\s(=)\s(?:"(2)"+|'(3*)'+|(4+)))?/
const ncname = [a-zA-Z_][\\w\\-\\.]*
const qname = ((?:${ncname}\\:)?${ncname})
const startTagOpen = new RegExp(^<${qname}
)
const startTagClose = /^\s*(/?)>/
const endTag = new RegExp(^<\\/${qname}[^>]*>
)
const comment = /^<!--/
const invalidAttributeRE = /[\s"'<>/=]/
正则可视化工具
https://regexper.com/
attribute
可以匹配的字符串
var r = /^\s(1+)(?:\s(=)\s(?:"(2)"+|'(3*)'+|(4+)))?/
r.test(' 1')
r.test(\` 1 = "2"`)
r.test(` 1 = ''`)
r.test(` 1 = 444`)
ncname
字面意思,两种合集的组合,第二个合集可以省略
comment
<!--
开头