...这个正则

来源:6-11 parse(7)

旋涡鸣人_

2019-02-03

const attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/

"+| 这个 地方的 加号有啥用啊 表示可以输入多个引号 ? 怪异啊

写回答

2回答

Arey_jy

2019-02-06

举个栗子:

// 当前处理的字符串 
var str = 'v-for="item in data"" class="some-class"'
// 如果去掉正则中的 + 符号,匹配后会怎么样?
const attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`])))?/
console.log(str.match(attribute))
// 第一次进行匹配到的字符为:'v-for="item in data"'
// 那么此时 str 剩余的字符为:'" class="some-class"'
// 在次 while 进行调用 match 匹配时,此次则返回的为 null,因为正则中第一个分组是不能为 " 符号的
console.log(str.match(attribute))

所有必须要匹配 一项或者是多项( " ' ),否则会影响后续解析

2
1
qq_飞越疯人院_1
这么叼
2019-02-11
共1条回复

ustbhuangyi

2019-02-06

这个 html parser 是很早之前大神 John Resig 写的,不过我也觉得这个 + 没啥必要,如上面同学举的例子,我觉得连续写多个 " 也并没有什么意义的。

0
0

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4986 学习 · 1038 问题

查看课程