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 {
4
4
let inSingle = false
5
5
let inDouble = false
6
6
let inTemplateString = false
7
+ let inRegex = false
7
8
let curly = 0
8
9
let square = 0
9
10
let paren = 0
@@ -14,14 +15,13 @@ export function parseFilters (exp: string): string {
14
15
prev = c
15
16
c = exp . charCodeAt ( i )
16
17
if ( inSingle ) {
17
- // check single quote
18
- if ( c === 0x27 && prev !== 0x5C ) inSingle = ! inSingle
18
+ if ( c === 0x27 && prev !== 0x5C ) inSingle = false
19
19
} else if ( inDouble ) {
20
- // check double quote
21
- if ( c === 0x22 && prev !== 0x5C ) inDouble = ! inDouble
20
+ if ( c === 0x22 && prev !== 0x5C ) inDouble = false
22
21
} 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
25
25
} else if (
26
26
c === 0x7C && // pipe
27
27
exp . charCodeAt ( i + 1 ) !== 0x7C &&
@@ -40,6 +40,7 @@ export function parseFilters (exp: string): string {
40
40
case 0x22 : inDouble = true ; break // "
41
41
case 0x27 : inSingle = true ; break // '
42
42
case 0x60 : inTemplateString = true ; break // `
43
+ case 0x2f : inRegex = true ; break // /
43
44
case 0x28 : paren ++ ; break // (
44
45
case 0x29 : paren -- ; break // )
45
46
case 0x5B : square ++ ; break // [
Original file line number Diff line number Diff line change @@ -54,6 +54,21 @@ describe('Filters', () => {
54
54
expect ( vm . $refs . bar ) . toBe ( vm . $el )
55
55
} )
56
56
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
+
57
72
it ( 'arguments' , ( ) => {
58
73
const vm = new Vue ( {
59
74
template : `<div>{{ msg | add(a, 3) }}</div>` ,
You can’t perform that action at this time.
0 commit comments