(exp)
| 9432 | */ |
| 9433 | console.log(parseFilters(' ab | c | d')) //转化成 _f("d")(_f("c")(ab)) |
| 9434 | function parseFilters(exp) { |
| 9435 | // 是否在 ''中 |
| 9436 | var inSingle = false; |
| 9437 | // 是否在 "" 中 |
| 9438 | var inDouble = false; |
| 9439 | // 是否在 `` |
| 9440 | var inTemplateString = false; |
| 9441 | // 是否在 正则 \\ 中 |
| 9442 | var inRegex = false; |
| 9443 | // 是否在 {{ 中发现一个 culy加1 然后发现一个 } culy减1 直到culy为0 说明 { .. }闭合 |
| 9444 | var curly = 0; |
| 9445 | // 跟{{ 一样 有一个 [ 加1 有一个 ] 减1 |
| 9446 | var square = 0; |
| 9447 | // 跟{{ 一样 有一个 ( 加1 有一个 ) 减1 |
| 9448 | var paren = 0; |
| 9449 | var lastFilterIndex = 0; |
| 9450 | var c, prev, i, expression, filters; |
| 9451 | |
| 9452 | for (i = 0; i < exp.length; i++) { |
| 9453 | prev = c; |
| 9454 | c = exp.charCodeAt(i); |
| 9455 | console.log('c =' + exp[i]) |
| 9456 | console.log('c === 0x7C=' + (c === 0x7C)) |
| 9457 | console.log('exp.charCodeAt(i + 1) !== 0x7C=' + (exp.charCodeAt(i + 1) !== 0x7C)) |
| 9458 | console.log('exp.charCodeAt(i - 1) !== 0x7C=' + (exp.charCodeAt(i - 1) !== 0x7C)) |
| 9459 | console.log('curly=' + (curly)) |
| 9460 | console.log('!curly=' + (!curly)) |
| 9461 | console.log('square=' + (square)) |
| 9462 | console.log('!square=' + (!square)) |
| 9463 | console.log('!paren=' + (!paren)) |
| 9464 | console.log('最后一个=' + (c === 0x7C && // pipe |
| 9465 | exp.charCodeAt(i + 1) !== 0x7C && |
| 9466 | exp.charCodeAt(i - 1) !== 0x7C && !curly && !square && !paren)) |
| 9467 | |
| 9468 | |
| 9469 | if (inSingle) { |
| 9470 | // ' \ |
| 9471 | if (c === 0x27 && prev !== 0x5C) { |
| 9472 | inSingle = false; |
| 9473 | } |
| 9474 | } else if (inDouble) { |
| 9475 | // " \ |
| 9476 | if (c === 0x22 && prev !== 0x5C) { |
| 9477 | inDouble = false; |
| 9478 | } |
| 9479 | } else if (inTemplateString) { |
| 9480 | // ` |
| 9481 | if (c === 0x60 && prev !== 0x5C) { |
| 9482 | inTemplateString = false; |
| 9483 | } |
| 9484 | } else if (inRegex) { |
| 9485 | // 当前在正则表达式中 /开始 |
| 9486 | // / \ |
| 9487 | if (c === 0x2f && prev !== 0x5C) { |
| 9488 | inRegex = false; |
| 9489 | } |
| 9490 | } else if ( |
| 9491 | // 如果在 之前不在 ' " ` / 即字符串 或者正则中 |
no test coverage detected