MCPcopy Index your code
hub / github.com/ygs-code/vue / parseText

Function parseText

vue.js:12308–12348  ·  view source on GitHub ↗
(text, //字符串
        delimiters //被修改默认的标签匹配
    )

Source from the content-addressed store, hash-verified

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}}这个'))

Callers 5

vue.jsFile · 0.85
transformNodeFunction · 0.85
transformNode$1Function · 0.85
parseFunction · 0.85
processAttrsFunction · 0.85

Calls 1

parseFiltersFunction · 0.85

Tested by

no test coverage detected