Skip to content

Commit c877a14

Browse files
committed
Use delimiter in repeating match
1 parent df4ef43 commit c877a14

File tree

2 files changed

+63
-7
lines changed

2 files changed

+63
-7
lines changed

index.js

+6-7
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ var PATH_REGEXP = new RegExp([
2525
// Match Express-style parameters and un-named parameters with a prefix
2626
// and optional suffixes. Matches appear as:
2727
//
28-
// "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?"]
29-
// "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined]
28+
// ":test(\\d+)?" => ["test", "\d+", undefined, "?"]
29+
// "(\\d+)" => [undefined, undefined, "\d+", undefined]
3030
'(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?'
3131
].join('|'), 'g')
3232

@@ -315,21 +315,20 @@ function tokensToRegExp (tokens, keys, options) {
315315
route += escapeString(token)
316316
isEndDelimited = i === tokens.length - 1 && delimiters.indexOf(token[token.length - 1]) > -1
317317
} else {
318-
var prefix = escapeString(token.prefix)
319318
var capture = token.repeat
320-
? '(?:' + token.pattern + ')(?:' + prefix + '(?:' + token.pattern + '))*'
319+
? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'
321320
: token.pattern
322321

323322
if (keys) keys.push(token)
324323

325324
if (token.optional) {
326325
if (token.partial) {
327-
route += prefix + '(' + capture + ')?'
326+
route += escapeString(token.prefix) + '(' + capture + ')?'
328327
} else {
329-
route += '(?:' + prefix + '(' + capture + '))?'
328+
route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'
330329
}
331330
} else {
332-
route += prefix + '(' + capture + ')'
331+
route += escapeString(token.prefix) + '(' + capture + ')'
333332
}
334333
}
335334
}

test.ts

+57
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,33 @@ var TESTS: Test[] = [
10771077
[{ test: 'route' }, 'route']
10781078
]
10791079
],
1080+
[
1081+
':test+',
1082+
null,
1083+
[
1084+
{
1085+
name: 'test',
1086+
prefix: '',
1087+
delimiter: '/',
1088+
optional: false,
1089+
repeat: true,
1090+
partial: false,
1091+
pattern: '[^\\/]+?'
1092+
}
1093+
],
1094+
[
1095+
['route', ['route', 'route']],
1096+
['/route', null],
1097+
['', null],
1098+
['foo/bar', ['foo/bar', 'foo/bar']]
1099+
],
1100+
[
1101+
[{}, null],
1102+
[{ test: '' }, null],
1103+
[{ test: ['route'] }, 'route'],
1104+
[{ test: ['foo', 'bar'] }, 'foo/bar']
1105+
]
1106+
],
10801107

10811108
/**
10821109
* Formats.
@@ -2251,6 +2278,36 @@ var TESTS: Test[] = [
22512278
[{ foo: 'foo', bar: 'bar' }, '$foo$bar'],
22522279
]
22532280
],
2281+
[
2282+
':test+',
2283+
{
2284+
delimiter: ' ',
2285+
delimiters: ' '
2286+
},
2287+
[
2288+
{
2289+
name: 'test',
2290+
prefix: '',
2291+
delimiter: ' ',
2292+
optional: false,
2293+
repeat: true,
2294+
partial: false,
2295+
pattern: '[^ ]+?'
2296+
}
2297+
],
2298+
[
2299+
['hello', ['hello', 'hello']],
2300+
[' hello ', null],
2301+
['', null],
2302+
['hello world', ['hello world', 'hello world']]
2303+
],
2304+
[
2305+
[{}, null],
2306+
[{ test: '' }, null],
2307+
[{ test: ['hello'] }, 'hello'],
2308+
[{ test: ['hello', 'world'] }, 'hello world']
2309+
]
2310+
],
22542311
]
22552312

22562313
/**

0 commit comments

Comments
 (0)