node-slug 参数清单完整指南:replacement、lower、remove 全选项与两种内置 mode 详解
【免费下载链接】node-slugslugifies even utf-8 chars!项目地址: https://gitcode.com/gh_mirrors/no/node-slug
本文是一份node-slug 参数清单完整指南,面向需要用这款 Node.js slugify 工具把任意字符串转成 URL 友好 slug 的开发者。你将了解replacement、lower、remove等全部选项的作用与默认值,并对比pretty与rfc3986两种内置 mode 的差异,几分钟就能配置出理想的 slugify 行为。
🚀 快速上手:1 分钟安装并完成第一次 slugify
安装只需一行命令:
npm install slug然后直接调用:
const slug = require('slug'); slug('i ♥ unicode'); // i-love-unicode slug('i ♥ unicode', '_'); // i_love_unicode slug('i ♥ unicode', { replacement: '_' });// 与上一行完全等价第二个参数有两种写法:直接传一个字符串(等价于{ replacement }),或传完整选项对象。实现见源码slug.js第 12–16 行。
📋 node-slug 参数清单:6 个选项 + mode 一览
| 参数 | 作用 | pretty 默认值 | rfc3986 默认值 |
|---|---|---|---|
replacement | 空格与分隔符的替换字符 | - | - |
lower | 结果是否统一转小写 | false | true |
remove | 额外删除字符的正则 | /[.]/g(删掉所有句点) | null(不删) |
symbols | 是否转换 Unicode 符号(♥ → love) | true | true |
charmap | 单字符映射表,可自定义扩展 | 内置拉丁/希腊/俄语等 | 同左 |
multicharmap | 多字符映射表 | <3→love、&&→and 等 | 同左 |
除这 6 个选项外,清单的核心是mode参数——用来在两种内置模式之间切换。
🔁 replacement:最常用的分隔符参数
replacement决定原字符串中的空格和分隔符被替换成什么,默认是-,也可以换成下划线、空串或任意字符:
slug('foo bar baz', '_'); // foo_bar_baz slug('foo bar baz', ''); // foobarbaz两条内置规则(见slug.js第 64–66 行)帮你省去手动处理:
- 连续的空格/分隔符会压缩成一个
replacement,不会产出--这类双分隔; - 末尾的分隔符会被自动去掉,结果不会以
-结尾。
🔡 lower:一个参数控制是否小写
结果是否全部小写由lower决定,两种模式的默认值不同:
| 模式 | lower默认 | 效果示例 |
|---|---|---|
pretty | false,保留原始大小写 | I-freaking-love-UNICODE |
rfc3986 | true,全部小写 | its-your-journey… |
在 pretty 模式下想强制小写,传{ lower: true }即可;官方测试用例test/slug.test.coffee第 226–234 行正好覆盖了这两种情况。
✂️ remove:用正则删除不想要的字符
remove接收一个正则,匹配到的字符会被直接删掉:
pretty模式默认为/[.]/g——句点默认全被删除(包括省略号…转换出的...);rfc3986模式默认为null,句点等合法字符原样保留。
想要更严格的“纯字母数字” slug 时,可以自己传:
slug("It's your journey ... we guide you.", { remove: /[^a-z]/gi });注意执行顺序:remove在字符映射和符号转换之后生效(见slug.js第 61 行),所以它操作的是转换后的结果。
🌐 charmap / multicharmap / symbols:三种映射能力
charmap(内置单字符映射表,见slug.js第 81–166 行),覆盖范围相当广:
- 拉丁文:
ß→ss、Æ→AE - 希腊文:
α→a、ψ→ps - 俄语:
ж→zh、ю→yu - 越南文、土耳其文、捷克文、波兰文等
- 货币符号:
€→euro、¥→yen、元→yuan - 排版符号:
©→(c)、™→tm
还可以随时扩展自己的映射:
slug.charmap['♥'] = 'freaking love';multicharmap(多字符映射,优先于 charmap 执行,见slug.js第 76–78 行):
<3→love、&&→and、||→or、w/→with
slug('w/ <3 && sugar || ☠'); // with-love-and-sugar-or-skull-and-bonessymbols(Unicode 符号转换,依赖内置 unicode 表):
♥→love、☢→radioactive、☯→yin-yang- 传
{ symbols: false }可关闭,关闭后这类符号会被直接移除。 - 特别提醒:Node(CommonJS)下 symbols 默认开启;浏览器(script 标签 / AMD)版本会自动关闭,避免加载约 2MB 的 Unicode 符号表(见
slug.js第 189–209 行)。
⚖️ pretty 与 rfc3986:两种内置 mode 怎么选?
mode用于切换两个预设,定义在slug.js第 168–185 行:
| 对比项 | pretty(默认) | rfc3986 |
|---|---|---|
| 定位 | 人类可读的友好 slug | 严格遵循 RFC 3986 URL 标准 |
remove | /[.]/g删除句点 | null不删除 |
lower | false保留大小写 | true全部小写 |
| 允许保留的符号 | _、~ | .、_、~ |
| 适用场景 | 文章标题、社交链接、SEO slug | 后端路由、API 路径、规范 URL |
一段对比最直观:
const text = "It's Your Journey We Guide You Through."; slug(text, { mode: 'pretty' }); // Its-Your-Journey-We-Guide-You-Through slug(text, { mode: 'rfc3986' }); // its-your-journey-we-guide-you-through.❓ 常见问题
Q1:为什么 rfc3986 模式下句点被保留了?因为.在 RFC 3986 中是合法的非保留字符,该模式remove为null,原样保留;而 pretty 模式默认/[.]/g会把它删掉。
Q2:允许保留的字符白名单是什么?slug.js第 60 行定义了白名单:单词字符、空格、-、.、_、~。其余字符要么被映射转换,要么被移除。
Q3:有命令行工具吗?有。包内附带slug可执行入口(见bin/slug.js),全局安装后执行slug "Hello World"会直接输出以下划线分隔的结果。
📁 文件资料清单
- 核心源码:
slug.js(完整流程:选项合并 → 字符映射 → 分隔符替换 → 小写处理) - 两种 mode 的预设定义:
slug.js第 168–185 行 - 内置 charmap 映射表:
slug.js第 81–166 行 - 选项合并逻辑:
slug.js第 12–25 行 - 完整测试用例(每个参数的行为都有示例):
test/slug.test.coffee - 快速上手示例与浏览器打包技巧:
README.md - 包信息(版本、依赖、CLI 入口):
package.json
【免费下载链接】node-slugslugifies even utf-8 chars!项目地址: https://gitcode.com/gh_mirrors/no/node-slug
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考