File tree 3 files changed +2358
-1564
lines changed
3 files changed +2358
-1564
lines changed Original file line number Diff line number Diff line change @@ -90,6 +90,7 @@ function parse (str, options) {
90
90
var optional = modifier === '?' || modifier === '*'
91
91
var pattern = capture || group
92
92
var delimiter = prev || defaultDelimiter
93
+ var prevText = prev || ( typeof tokens [ tokens . length - 1 ] === 'string' ? tokens [ tokens . length - 1 ] : '' )
93
94
94
95
tokens . push ( {
95
96
name : name || key ++ ,
@@ -99,7 +100,7 @@ function parse (str, options) {
99
100
repeat : repeat ,
100
101
pattern : pattern
101
102
? escapeGroup ( pattern )
102
- : '[^' + escapeString ( delimiter === defaultDelimiter ? delimiter : ( delimiter + defaultDelimiter ) ) + ']+?'
103
+ : restrictBacktrack ( delimiter , defaultDelimiter , prevText )
103
104
} )
104
105
}
105
106
@@ -111,6 +112,16 @@ function parse (str, options) {
111
112
return tokens
112
113
}
113
114
115
+ function restrictBacktrack ( delimiter , defaultDelimiter , prevText ) {
116
+ var charGroup = '[^' + escapeString ( delimiter === defaultDelimiter ? delimiter : ( delimiter + defaultDelimiter ) ) + ']'
117
+
118
+ if ( ! prevText || prevText . indexOf ( delimiter ) > - 1 || prevText . indexOf ( defaultDelimiter ) > - 1 ) {
119
+ return charGroup + '+?'
120
+ }
121
+
122
+ return escapeString ( prevText ) + '|(?:(?!' + escapeString ( prevText ) + ')' + charGroup + ')+?'
123
+ }
124
+
114
125
/**
115
126
* Compile a string to a template function for the path.
116
127
*
You can’t perform that action at this time.
0 commit comments