Skip to content

Commit ccaf476

Browse files
committed
support asterisk as an unnamed matching group
1 parent 5ff1028 commit ccaf476

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

index.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ var PATH_REGEXP = new RegExp([
2121
// Match Express-style parameters and un-named parameters with a prefix
2222
// and optional suffixes. Matches appear as:
2323
//
24-
// "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?"]
25-
// "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined]
26-
'([\\/.])?(?:\\:(\\w+)(?:\\(((?:\\\\.|[^)])*)\\))?|\\(((?:\\\\.|[^)])*)\\))([+*?])?'
24+
// "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
25+
// "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined]
26+
// "/*" => ["/", undefined, undefined, undefined, undefined, "*"]
27+
'([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^()])+)\\))?|\\(((?:\\\\.|[^()])+)\\))([+*?])?|(\\*))'
2728
].join('|'), 'g')
2829

2930
/**
@@ -63,18 +64,20 @@ function parse (str) {
6364
var capture = res[4]
6465
var group = res[5]
6566
var suffix = res[6]
67+
var asterisk = res[7]
6668

6769
var repeat = suffix === '+' || suffix === '*'
6870
var optional = suffix === '?' || suffix === '*'
6971
var delimiter = prefix || '/'
72+
var pattern = capture || group || (asterisk ? '.*' : '[^' + delimiter + ']+?')
7073

7174
tokens.push({
7275
name: name || key++,
7376
prefix: prefix || '',
7477
delimiter: delimiter,
7578
optional: optional,
7679
repeat: repeat,
77-
pattern: escapeGroup(capture || group || '[^' + delimiter + ']+?')
80+
pattern: escapeGroup(pattern)
7881
})
7982
}
8083

test.js

+29-1
Original file line numberDiff line numberDiff line change
@@ -1492,7 +1492,7 @@ var TESTS = [
14921492
]
14931493
],
14941494
[
1495-
'/.+*?=^!:${}[]|',
1495+
'/.+\\*?=^!:${}[]|',
14961496
null,
14971497
[
14981498
'/.+*?=^!:${}[]|'
@@ -1505,6 +1505,34 @@ var TESTS = [
15051505
]
15061506
],
15071507

1508+
/**
1509+
* Asterisk functionality.
1510+
*/
1511+
[
1512+
'/*',
1513+
null,
1514+
[
1515+
{
1516+
name: 0,
1517+
prefix: '/',
1518+
delimiter: '/',
1519+
optional: false,
1520+
repeat: false,
1521+
pattern: '.*'
1522+
}
1523+
],
1524+
[
1525+
['', null],
1526+
['/', ['/', '']],
1527+
['/foo/bar', ['/foo/bar', 'foo/bar']]
1528+
],
1529+
[
1530+
[null, null],
1531+
[{ '0': '' }, '/'],
1532+
[{ '0': 'foobar' }, '/foobar']
1533+
]
1534+
],
1535+
15081536
/**
15091537
* Random examples.
15101538
*/

0 commit comments

Comments
 (0)