通常我使用 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/