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