const cname = '[a-zA-Z_][\\w\\-\\.]*'
const qnameCapture = `((?:${cname}\\:)?${cname})` const startTagOpen = new RegExp(`^<${qnameCapture}`);
这段正则其实只是解析标签的开标签,看起来有点费力。
解析:
1 \\. 这里代表的是普通点 . 而不是除了(\n、\r)之外的任何字符的元字符
2 \\- 就是普通的中划线-
3 首字母就是大小写英文字母和下划线之后可以跟多个[A-Za-z0-9_-.]字符
4 可以将两个合法的qname以 : 分隔作为完整的标签名
简单说,较之常见的标签名,合法类型还包括以下几种:
<_div> ,<div.plus>,<my-div> <div:subdiv>