diff --git a/modules/utils/Path.js b/modules/utils/Path.js index e212288ef5..e942e94847 100644 --- a/modules/utils/Path.js +++ b/modules/utils/Path.js @@ -14,7 +14,8 @@ function encodeURLPath(path) { return String(path).split('/').map(encodeURL).join('/'); } -var paramMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|[*.()\[\]\\+|{}^$]/g; +var paramCompileMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|[*.()\[\]\\+|{}^$]/g; +var paramInjectMatcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|[*]/g; var queryMatcher = /\?(.+)/; var _compiledPatterns = {}; @@ -22,7 +23,7 @@ var _compiledPatterns = {}; function compilePattern(pattern) { if (!(pattern in _compiledPatterns)) { var paramNames = []; - var source = pattern.replace(paramMatcher, function (match, paramName) { + var source = pattern.replace(paramCompileMatcher, function (match, paramName) { if (paramName) { paramNames.push(paramName); return '([^/?#]+)'; @@ -82,7 +83,7 @@ var Path = { var splatIndex = 0; - return pattern.replace(paramMatcher, function (match, paramName) { + return pattern.replace(paramInjectMatcher, function (match, paramName) { paramName = paramName || 'splat'; invariant( diff --git a/modules/utils/__tests__/Path-test.js b/modules/utils/__tests__/Path-test.js index e926232da8..c2dfbaa9d5 100644 --- a/modules/utils/__tests__/Path-test.js +++ b/modules/utils/__tests__/Path-test.js @@ -212,6 +212,12 @@ describe('Path.injectParams', function () { }).toThrow(Error); }); }); + + describe('when a pattern has dots', function() { + it('returns the correct path', function() { + expect(Path.injectParams('/foo.bar.baz')).toEqual('/foo.bar.baz'); + }); + }); }); describe('Path.extractQuery', function () {