Software Engineering :: Programming :: Languages :: JavaScript :: String :: Instance :: String.prototype.replace() :: Example :: URI Template To RegExp
⪼ Made with 💜 by Polyglot.
- Software Engineering :: Networking :: HTTP :: URI :: Template
- Software Engineering :: Programming :: Languages :: JavaScript :: Library :: wroute
> '/users/{id}/comments/{commentId}'.replace(/{(?<parameter>[0-9a-zA-Z]+)}/g, '{(?<$<parameter>>[0-9a-zA-Z]+)}')
'/users/{(?<id>[0-9a-zA-Z]+)}/comments/{(?<commentId>[0-9a-zA-Z]+)}'
> RegExp('/users/{id}/comments/{commentId}'.replace(/{(?<parameter>[0-9a-zA-Z]+)}/g, '{(?<$<parameter>>[0-9a-zA-Z]+)}'))
/\/users\/{(?<id>[0-9a-zA-Z]+)}\/comments\/{(?<commentId>[0-9a-zA-Z]+)}/> '/users/{id}/comments/{commentId}'.replace(/{(?<parameter>[0-9a-zA-Z]+)}/g, '(?<$<parameter>>[0-9a-zA-Z]+)')
'/users/(?<id>[0-9a-zA-Z]+)/comments/(?<commentId>[0-9a-zA-Z]+)'
> RegExp('/users/{id}/comments/{commentId}'.replace(/{(?<parameter>[0-9a-zA-Z]+)}/g, '(?<$<parameter>>[0-9a-zA-Z]+)'))
/\/users\/(?<id>[0-9a-zA-Z]+)\/comments\/(?<commentId>[0-9a-zA-Z]+)/let templateToRegExp = null
templateToRegExp = (templateString) => {
return RegExp(`^${templateString.replace(/{(?<parameter>[0-9a-zA-Z]+)}/g, '(?<$<parameter>>[0-9a-zA-Z]+)')}$`)
}
routeMatcher = (templateString) => {
const pattern = RegExp(`^${templateString.replace(/{(?<parameter>[0-9a-zA-Z]+)}/g, '(?<$<parameter>>[0-9a-zA-Z]+)')}$`)
return (endpoint) => pattern.test(endpoint)
}
> routeMatcher('/users/{id}')('/users/123')
true
let routes = {}
routes = {
'/': { name: "root" },
'/posts': { name: "posts" },
'/posts/{id}': { name: "posts by id" },
'/posts/{id}/comments': { name: "post by id comments" },
'/posts/{id}/comments/{commentId}': { name: "post comments by id" },
}
Object.keys(routes).filter((uriTemplate) => routeMatcher(uriTemplate)('/posts/123'))
> Object.keys(routes).filter((uriTemplate) => routeMatcher(uriTemplate)('/users/123'))
[]
> Object.keys(routes).filter((uriTemplate) => routeMatcher(uriTemplate)('/posts/123'))
[ '/posts/{id}' ]
> Object.keys(routes).filter((uriTemplate) => routeMatcher(uriTemplate)('/posts/123/comments'))
[ '/posts/{id}/comments' ]
>
> Object.keys(routes).filter((uriTemplate) => routeMatcher(uriTemplate)('/posts/123/comments/432'))
[ '/posts/{id}/comments/{commentId}' ]