File tree Expand file tree Collapse file tree 2 files changed +22
-6
lines changed
test/unit/features/filter Expand file tree Collapse file tree 2 files changed +22
-6
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ export function parseFilters (exp: string): string {
44 let inSingle = false
55 let inDouble = false
66 let inTemplateString = false
7+ let inRegex = false
78 let curly = 0
89 let square = 0
910 let paren = 0
@@ -14,14 +15,13 @@ export function parseFilters (exp: string): string {
1415 prev = c
1516 c = exp . charCodeAt ( i )
1617 if ( inSingle ) {
17- // check single quote
18- if ( c === 0x27 && prev !== 0x5C ) inSingle = ! inSingle
18+ if ( c === 0x27 && prev !== 0x5C ) inSingle = false
1919 } else if ( inDouble ) {
20- // check double quote
21- if ( c === 0x22 && prev !== 0x5C ) inDouble = ! inDouble
20+ if ( c === 0x22 && prev !== 0x5C ) inDouble = false
2221 } else if ( inTemplateString ) {
23- // check template literal
24- if ( c === 0x60 && prev !== 0x5C ) inTemplateString = ! inTemplateString
22+ if ( c === 0x60 && prev !== 0x5C ) inTemplateString = false
23+ } else if ( inRegex ) {
24+ if ( c === 0x2f && prev !== 0x5C ) inRegex = false
2525 } else if (
2626 c === 0x7C && // pipe
2727 exp . charCodeAt ( i + 1 ) !== 0x7C &&
@@ -40,6 +40,7 @@ export function parseFilters (exp: string): string {
4040 case 0x22 : inDouble = true ; break // "
4141 case 0x27 : inSingle = true ; break // '
4242 case 0x60 : inTemplateString = true ; break // `
43+ case 0x2f : inRegex = true ; break // /
4344 case 0x28 : paren ++ ; break // (
4445 case 0x29 : paren -- ; break // )
4546 case 0x5B : square ++ ; break // [
Original file line number Diff line number Diff line change @@ -54,6 +54,21 @@ describe('Filters', () => {
5454 expect ( vm . $refs . bar ) . toBe ( vm . $el )
5555 } )
5656
57+ it ( 'handle regex with pipe' , ( ) => {
58+ const vm = new Vue ( {
59+ template : `<test ref="test" :pattern="/a|b\\// | identity"></test>` ,
60+ filters : { identity : v => v } ,
61+ components : {
62+ test : {
63+ props : [ 'pattern' ] ,
64+ template : '<div></div>'
65+ }
66+ }
67+ } ) . $mount ( )
68+ expect ( vm . $refs . test . pattern instanceof RegExp ) . toBe ( true )
69+ expect ( vm . $refs . test . pattern . toString ( ) ) . toBe ( '/a|b\\//' )
70+ } )
71+
5772 it ( 'arguments' , ( ) => {
5873 const vm = new Vue ( {
5974 template : `<div>{{ msg | add(a, 3) }}</div>` ,
You can’t perform that action at this time.
0 commit comments