/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/
这个正则有点长,
1 先说 \s*([^\s"'<>\/=]+),\s*的作用是先吃尽 所有空白符(空白、换行、tab等等),[^\s"'<>\/=]+ 取排除字符组之外的字符作为 “属性名”,这就是捕获 属性名 的过程
2 再说 (?:\s*(=)\s* , ?: 指的是非捕获组。这段意思是说 = 号前后可以有空格或其他空白字符。
3 第三段就比较有意思了,属性值支持三种格式 "xxx" ,'xxx' ,和xxx
4 "([^"]*)" 是匹配 两个"之内任何不是"的字符,同理'([^']*)'也一样。不看正则源码,我还不知道可以支持 abc=def这种格式
5 从属性值的正则 "+ 的加号看来,可以匹配非对称数量的引号,"a"" 不知道有什么意义。
网友评论