node-slug 参数清单完整指南:replacement、lower、remove 全选项与两种内置 mode 详解
2026/8/25 17:56:53 网站建设 项目流程

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 的开发者。你将了解replacementlowerremove等全部选项的作用与默认值,并对比prettyrfc3986两种内置 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结果是否统一转小写falsetrue
remove额外删除字符的正则/[.]/g(删掉所有句点)null(不删)
symbols是否转换 Unicode 符号(♥ → love)truetrue
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默认效果示例
prettyfalse,保留原始大小写I-freaking-love-UNICODE
rfc3986true,全部小写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¥yenyuan
  • 排版符号:©(c)tm

还可以随时扩展自己的映射:

slug.charmap['♥'] = 'freaking love';

multicharmap(多字符映射,优先于 charmap 执行,见slug.js第 76–78 行)

  • <3love&&and||orw/with
slug('w/ <3 && sugar || ☠'); // with-love-and-sugar-or-skull-and-bones

symbols(Unicode 符号转换,依赖内置 unicode 表)

  • loveradioactiveyin-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不删除
lowerfalse保留大小写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 中是合法的非保留字符,该模式removenull,原样保留;而 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询