Nodejs pathing - 一個快速、簡單 URL path 詞法分析器

Nodejs pathing - 一個快速、簡單 URL path 詞法分析器

https://github.com/fundon/pathing

語法:默認使用{}作爲標籤分隔符。

/posts/{id}       默認使用 [^/]+ 正則表達式.
/posts/{id:\\d+}  使用 `\d+` 正則表達式.

用例:

var pathing = require('pathing');
var tokens = pathing('/{controller}/{action}/{id:\\d+}');
/*
tokens:
  [
    { name: 'DIVIDE', value: '/', pos: 0 },
    { name: 'PLACEHOLDER', value: 'controller', pos: 1, regexp: '[^/]+' },
    { name: 'DIVIDE', value: '/', pos: 13 },
    { name: 'PLACEHOLDER', value: 'action', pos: 14, regexp: '[^/]+' }
    { name: 'DIVIDE', value: '/', pos: 22 },
    { name: 'PLACEHOLDER', value: 'id', pos: 23, regexp: '\\d+' } ]
  ]
*/

var tokens = pathing(’{year}-{month}-{day}’); /* tokens: [ { name: ‘PLACEHOLDER’, value: ‘year’, pos: 0, regexp: ‘[^/]+’ }, { name: ‘DASH’, value: ‘-’, pos: 6 }, { name: ‘PLACEHOLDER’, value: ‘month’, pos: 7, regexp: ‘[^/]+’ }, { name: ‘DASH’, value: ‘-’, pos: 14 }, { name: ‘PLACEHOLDER’, value: ‘day’, pos: 15, regexp: ‘[^/]+’ } ] */

自定義分隔符:

var tokens = pathing('/posts/<id>', { open: '<', close: '>' });
/*
tokens:
  [
    { name: 'DIVIDE', value: '/', pos: 0 },
    { name: 'IDENTIFIER', value: 'posts', pos: 1 },
    { name: 'DIVIDE', value: '/', pos: 6 },
    { name: 'PLACEHOLDER', value: 'id', pos: 7, regexp: '[^/]+' }
  ]
*/

2 回复

Nodejs pathing - 一個快速、簡單 URL path 詞法分析器

介绍

在Web开发中,URL路径解析是一个常见的需求。pathing 是一个轻量级的Node.js库,用于解析和分析URL路径。它可以帮助你快速地从复杂的URL路径中提取出参数,并且支持自定义分隔符。

GitHub仓库

你可以在这里找到pathing的GitHub仓库:https://github.com/fundon/pathing

语法

默认情况下,pathing 使用 {} 作为占位符分隔符。你也可以指定正则表达式来匹配特定类型的参数。

// 默认使用 [^/]+ 正则表达式
/posts/{id}

// 使用 \d+ 正则表达式
/posts/{id:\\d+}

用例

以下是一些使用pathing解析URL路径的例子:

var pathing = require('pathing');

// 示例1
var tokens = pathing('/posts/{controller}/{action}/{id:\\d+}');
console.log(tokens);
/*
输出:
[
  { name: 'DIVIDE', value: '/', pos: 0 },
  { name: 'PLACEHOLDER', value: 'controller', pos: 1, regexp: '[^/]+' },
  { name: 'DIVIDE', value: '/', pos: 13 },
  { name: 'PLACEHOLDER', value: 'action', pos: 14, regexp: '[^/]+' },
  { name: 'DIVIDE', value: '/', pos: 22 },
  { name: 'PLACEHOLDER', value: 'id', pos: 23, regexp: '\\d+' }
]
*/

// 示例2
var tokens = pathing('{year}-{month}-{day}');
console.log(tokens);
/*
输出:
[
  { name: 'PLACEHOLDER', value: 'year', pos: 0, regexp: '[^/]+' },
  { name: 'DASH', value: '-', pos: 6 },
  { name: 'PLACEHOLDER', value: 'month', pos: 7, regexp: '[^/]+' },
  { name: 'DASH', value: '-', pos: 14 },
  { name: 'PLACEHOLDER', value: 'day', pos: 15, regexp: '[^/]+' }
]
*/

自定义分隔符

如果你不想使用默认的 {} 分隔符,可以通过配置来自定义它们:

var tokens = pathing('/posts/<id>', { open: '<', close: '>' });
console.log(tokens);
/*
输出:
[
  { name: 'DIVIDE', value: '/', pos: 0 },
  { name: 'IDENTIFIER', value: 'posts', pos: 1 },
  { name: 'DIVIDE', value: '/', pos: 6 },
  { name: 'PLACEHOLDER', value: 'id', pos: 7, regexp: '[^/]+' }
]
*/

通过这些例子,你可以看到pathing如何帮助你轻松解析和处理复杂的URL路径。希望这对你有所帮助!


在这个帖子中,讨论的是一个名为 pathing 的 Node.js 模块,它用于解析和处理 URL 路径中的占位符。该模块允许用户定义路径模板,并能够生成一个令牌数组,这些令牌包含了路径中的静态部分和动态部分的信息。

示例代码

const pathing = require('pathing');

// 默认使用 {} 分隔符
let tokens = pathing('/posts/{id}');
console.log(tokens);
// 输出:
// [
//   { name: 'DIVIDE', value: '/', pos: 0 },
//   { name: 'PLACEHOLDER', value: 'id', pos: 8, regexp: '[^/]+' }
// ]

// 自定义分隔符
tokens = pathing('/posts/<id>', { open: '<', close: '>' });
console.log(tokens);
// 输出:
// [
//   { name: 'DIVIDE', value: '/', pos: 0 },
//   { name: 'IDENTIFIER', value: 'posts', pos: 1 },
//   { name: 'DIVIDE', value: '/', pos: 6 },
//   { name: 'PLACEHOLDER', value: 'id', pos: 7, regexp: '[^/]+' }
// ]

解释

  • 默认分隔符:当使用 {} 作为分隔符时,pathing 函数会识别路径中的静态部分(如 /posts/)和动态部分(如 {id}),并生成一个包含令牌的数组。

  • 自定义分隔符:可以通过传递一个配置对象来指定不同的分隔符,例如 <>,这使得可以处理更复杂的路径模板。

每个令牌包含名称(如 DIVIDEPLACEHOLDER)、值(如路径中的实际文本或占位符名)、位置(在原始路径中的索引)以及正则表达式(如果适用)。

通过这种方式,pathing 模块可以帮助开发者更好地理解和处理 URL 路径中的动态部分,从而简化路由和路径匹配的逻辑。

回到顶部