Path-to-RegExp将路径字符串转换为正则表达式的工具

联合创作 · 2023-09-30 13:45

Path-to-RegExp 是一个可以将诸如/user/:name这样的路径字符串转换为正则表达式的工具。

安装

npm install path-to-regexp --save 

用法

const { pathToRegexp, match, parse, compile } = require("path-to-regexp");

// pathToRegexp(path, keys?, options?)
// match(path)
// parse(path)
// compile(path)

Path to regexp

pathToRegexp函数将根据提供的path参数返回一个正则表达式对象。它接受以下参数:

  • Path 字符串、字符串数组或正则表达式。
  • Keys (可选)要填充路径中找到的键的数组。
  • Option (可选)
    • sensitive 
    • strict 
    • end
    • start
    • delimiter 
    • EndsWith
    • encode
    • prefixes
const keys = [];
const regexp = pathToRegexp("/foo/:bar", keys);
// regexp = /^\/foo(?:\/([^\/#\?]+?))[\/#\?]?$/i
// keys = [{ name: 'bar', prefix: '/', suffix: '', pattern: '[^\\/#\\?]+?', modifier: '' }]

参数

path 参数用于定义参数和填充键。

命名参数

命名参数是通过在参数名称前加一个冒号来定义的( :foo)

const regexp = pathToRegexp("/:foo/:bar");
// keys = [{ name: 'foo', prefix: '/', ... }, { name: 'bar', prefix: '/', ... }]

regexp.exec("/test/route");
//=> [ '/test/route', 'test', 'route', index: 0, input: '/test/route', groups: undefined ]

请注意:参数名称必须使用“单词字符”( [A-Za-z0-9_])。

自定义匹配参数

参数可以有一个自定义的正则表达式,它会覆盖默认匹配 ( [^/]+)。例如,可以匹配路径中的数字或名称:

const regexpNumbers = pathToRegexp("/icon-:foo(\\d+).png");
// keys = [{ name: 'foo', ... }]

regexpNumbers.exec("/icon-123.png");
//=> ['/icon-123.png', '123']

regexpNumbers.exec("/icon-abc.png");
//=> null

const regexpWord = pathToRegexp("/(user|u)");
// keys = [{ name: 0, ... }]

regexpWord.exec("/u");
//=> ['/u', 'u']

regexpWord.exec("/users");
//=> null

提示:反斜杠需要在 JavaScript 字符串中使用另一个反斜杠进行转义。

自定义前缀和后缀

可以将参数包裹起来,{}为你的细分创建自定义前缀或后缀:

const regexp = pathToRegexp("/:attr1?{-:attr2}?{-:attr3}?");

regexp.exec("/test");
// => ['/test', 'test', undefined, undefined]

regexp.exec("/test-test");
// => ['/test', 'test', 'test', undefined]
浏览 9
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报