(text, //字符串
delimiters //被修改默认的标签匹配
)
| 12306 | //匹配view 指令,并且把他转换成 虚拟dom vonde 需要渲染的函数,比如指令{{name}}转换成 _s(name) |
| 12307 | //比如字符串 我叫{{name}},今年{{age}},数据{{data.number}}个手机 转换成 我叫+_s(name)+,今年+_s(age)+,数据+_s(data.number)+个手机 |
| 12308 | function parseText(text, //字符串 |
| 12309 | delimiters //被修改默认的标签匹配 |
| 12310 | ) { |
| 12311 | var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; // 如果delimiters不存在则 用默认指令 {{}},如果修改成其他指令则用其他指令 |
| 12312 | if (!tagRE.test(text)) { //判断字符串是否含有指令 |
| 12313 | return |
| 12314 | } |
| 12315 | var tokens = []; |
| 12316 | var rawTokens = []; |
| 12317 | var lastIndex = tagRE.lastIndex = 0; |
| 12318 | var match, index, tokenValue; |
| 12319 | while ((match = tagRE.exec(text))) { //循环能匹配上的指令,全局匹配代码:的时候会有个lastIndex 执行exec方法后,lastIndex就会记录匹配的字符串在原始字符串中最后一位的索引加一, |
| 12320 | console.log('match=') |
| 12321 | console.log(match) |
| 12322 | console.log('match.index=' + match.index) |
| 12323 | console.log('lastIndex=' + lastIndex) |
| 12324 | index = match.index; //当前匹配上的字符串位置,也可以是上一次匹配出来的位置 |
| 12325 | // push text token |
| 12326 | if (index > lastIndex) { // |
| 12327 | rawTokens.push(tokenValue = text.slice(lastIndex, index)); //截取匹配到字符串指令前面的字符串,并添加到rawTokens |
| 12328 | tokens.push(JSON.stringify(tokenValue)); //添加匹配到字符串指令前面的字符串 |
| 12329 | } |
| 12330 | // tag token |
| 12331 | //处理value 解析成正确的value,把过滤器 转换成vue 虚拟dom的解析方法函数 比如把过滤器 ' ab | c | d' 转换成 _f("d")(_f("c")(ab)) |
| 12332 | var exp = parseFilters(match[1].trim()); // |
| 12333 | tokens.push(("_s(" + exp + ")")); //把指令转义成函数,便于vonde 虚拟dom 渲染 比如指令{{name}} 转换成 _s(name) |
| 12334 | rawTokens.push({ '@binding': exp }); //绑定指令{{name}} 指令转换成 [{@binding: "name"}] |
| 12335 | lastIndex = index + match[0].length; // 上一次匹配出来的字符串的位置+上一次字符串的长度 比如字符串 我叫{{name}},今年{{age}},数据{{data.number}}个手机 这时候lastIndex 等于10 |
| 12336 | |
| 12337 | } |
| 12338 | console.log(lastIndex) |
| 12339 | console.log(text.length) |
| 12340 | if (lastIndex < text.length) { //拼接最后一个字符, 数据{{data.number}}个手机 把个手机 的字符串连接起来 |
| 12341 | rawTokens.push(tokenValue = text.slice(lastIndex)); //截取字符串。到最后一位 |
| 12342 | tokens.push(JSON.stringify(tokenValue)); //拼接最后一位字符串 |
| 12343 | } |
| 12344 | return { |
| 12345 | expression: tokens.join('+'), //把数组变成字符串,用加号链接 比如数组为 ['我叫','_s(name)',',今年','_s(age)',',数据','_s(data.number)','个手机'] 变成 我叫+_s(name)+,今年+_s(age)+,数据+_s(data.number)+个手机 |
| 12346 | tokens: rawTokens |
| 12347 | } |
| 12348 | } |
| 12349 | |
| 12350 | console.log(parseText('我叫{{name}},今年{{age}},数据{{data.number}}个手机')) |
| 12351 | // console.log(parseText('{{name}}这个')) |
no test coverage detected