Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cowboy/javascript-route-matcher
A simple route matching / url building utility. Intended to be included as part of a larger routing library.
https://github.com/cowboy/javascript-route-matcher
Last synced: about 2 months ago
JSON representation
A simple route matching / url building utility. Intended to be included as part of a larger routing library.
- Host: GitHub
- URL: https://github.com/cowboy/javascript-route-matcher
- Owner: cowboy
- License: gpl-2.0
- Created: 2011-09-15T20:46:31.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2017-05-06T09:28:02.000Z (over 7 years ago)
- Last Synced: 2024-10-14T14:17:55.327Z (2 months ago)
- Language: JavaScript
- Homepage: http://benalman.com/
- Size: 183 KB
- Stars: 81
- Watchers: 4
- Forks: 13
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE-GPL
Awesome Lists containing this project
README
# JavaScript Basic Route Matcher
A simple route matching / url building utility. Intended to be included as part of a larger routing library.
## Getting Started
In Node.js, run `npm install route-matcher` and then use this code:
```javascript
var routeMatcher = require("route-matcher").routeMatcher;
var myRoute = routeMatcher("user/:id");
```Or in the browser:
```html
var myRoute = routeMatcher("user/:id");
```
In the browser, you can attach routeMatcher to any object.
```html
this.exports = Bocoup.utils;
var myRoute = Bocoup.utils.routeMatcher("user/:id");
```
## Sample Usage
```javascript
// Use routeMatcher to create a reusable route matching function.
var search = routeMatcher("search/:query/p:page");
search.parse("search/gonna-fail") // null (no match)
search.parse("search/cowboy/p5") // {query: "cowboy", page: "5"}
search.parse("search/gnarf/p10") // {query: "gnarf", page: "10"}// But wait, it goes both ways!
search.stringify({query: "bonus", page: "6"}) // "search/bonus/p6"// You can also pass in a map of per-param validators after the route, each can
// be a RegExp to test against, function that accepts a value (and returns true
// or false) or value to match against.
var user = routeMatcher("user/:id/:other", {
id: /^\d+$/,
other: function(value) { return value === "" || value === "foo"; }
});
user.parse("user/123/abc") // null (no match)
user.parse("user/foo/") // null (no match)
user.parse("user/123/") // {id: "123", other: ""}
user.parse("user/123/foo") // {id: "123", other: "foo"}// Note that .stringify doesn't perform any validation. Should it?
user.stringify({id: "abc", other: "xyz"}) // "user/abc/xyz"// You can pass in a RegExp route, which returns an object with a `captures`
// property, or null if no match. Note that for RegExp routes, the .stringify
// method always returns empty string, because stringification isn't supported.
var users = routeMatcher(/^(users?)(?:\/(\d+)(?:\.\.(\d+))?)?/);
users.parse("gonna-fail") // null (no match)
users.parse("user") // {captures: ["user", undefined, undefined]}
users.parse("users") // {captures: ["users", undefined, undefined]}
users.parse("user/123") // {captures: ["user", "123", undefined]}
users.parse("user/123..456") // {captures: ["user", "123", "456"]}
```## Documentation
For now, look at the unit tests.## Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [grunt](https://github.com/cowboy/node-grunt)._Also, please don't edit files in the "dist" subdirectory as they are generated via grunt. You'll find source code in the "lib" subdirectory!_
## Release History
Nothing official yet...## License
Copyright (c) 2011 "Cowboy" Ben Alman
Dual licensed under the MIT and GPL licenses.