javascript - 如何从汉字生成 url slug?

标签 javascript

通常我使用 https://github.com/jprichardson/string.js 来生成 url slug库 - 正是 slugify 方法。但是它会删除所有汉字。作为解决方法,我使用以下函数:

var slugify = function(str){
   str = str.replace(/\s+/g,'-') // replace spaces with dashes
   str = encodeURIComponent(str) // encode (it encodes chinese characters)
   return str
}

所以对于输入 中文标题 我得到 %E4%B8%AD%E6%96%87-%E6%A0%87%E9%A2%98 和它在网络浏览器 url 输入框中看起来像这样(并且有效):

http://example.com/中文-标题

但是我还想删除任何特殊字符,如 !@#$%^&*) 等。问题是 string.js 库正在使用以下部分内部代码:

.replace(/[^\w\s-]/g

它会删除任何特殊字符,但也会删除中文字符,因为它们与 \w 正则表达式不匹配...

所以我的问题是 - 如何修改上面的正则表达式以使其保留汉字?


我试过了

replace(/[^a-zA-Z0-9_\s-\u3400-\u9FBF]/g,'')

但它仍然取代了汉字......

最佳答案

如果你想匹配(或排除)一组字符(带方括号)中的破折号-,你必须把它放在最后。

你的正则表达式匹配的字符不是

  • a-z 范围内>
  • A-Z 范围内>
  • 0-9 范围内
  • _
  • \s-\u3400 范围内 那是你的问题
  • -
  • \u9FBF

你想做的事:

replace(/[^a-zA-Z0-9_\u3400-\u9FBF\s-]/g,'')

关于javascript - 如何从汉字生成 url slug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25698733/

相关文章:

javascript - 为什么我在接口(interface)和可观察对象方面遇到错误?

javascript - 如何使用 js/jquery 找到最高的数据属性并向其附加一个 div

javascript - AngularJS:编译与模板

javascript - 使用 Slider 的 ExtJs 任务运行程序

javascript - 有谁知道有什么好的网络调试工具吗?

javascript - 如何从固定字符串中删除字符

javascript - 如何在循环的同时使用 if/else 语句?

javascript - 如何使用javascript访问上传的文件?

javascript - 使用上一个和下一个按钮导航 Bootstrap 日期选择器

javascript - 将 html 移动到 php include 后事情发生了变化