File tree Expand file tree Collapse file tree 3 files changed +2358
-1564
lines changed Expand file tree Collapse file tree 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) {
9090 var optional = modifier === '?' || modifier === '*'
9191 var pattern = capture || group
9292 var delimiter = prev || defaultDelimiter
93+ var prevText = prev || ( typeof tokens [ tokens . length - 1 ] === 'string' ? tokens [ tokens . length - 1 ] : '' )
9394
9495 tokens . push ( {
9596 name : name || key ++ ,
@@ -99,7 +100,7 @@ function parse (str, options) {
99100 repeat : repeat ,
100101 pattern : pattern
101102 ? escapeGroup ( pattern )
102- : '[^' + escapeString ( delimiter === defaultDelimiter ? delimiter : ( delimiter + defaultDelimiter ) ) + ']+?'
103+ : restrictBacktrack ( delimiter , defaultDelimiter , prevText )
103104 } )
104105 }
105106
@@ -111,6 +112,16 @@ function parse (str, options) {
111112 return tokens
112113}
113114
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+
114125/**
115126 * Compile a string to a template function for the path.
116127 *
You can’t perform that action at this time.
0 commit comments