我正在编写一个javascript正则表达式,将字符串转换为短名称(用于干净的URL)。我需要它:
这是我到目前为止所提供的内容(为了便于阅读而添加了新行):
clean_value = $(this).val().toLowerCase().replace(/[^a-z0-9 -]+/g,'')
.replace(/^\s+|\s+$/g, '').replace(/ +(?= )/g,'-')
.replace(/ /g, '-');
这样做但是我知道有一种更有效的方式来形成这些REGEX ......我对它们非常糟糕,花了一个小时试图找出如何尽可能地组合它们。
非常感谢任何帮助!
答案 0 :(得分:1)
在我看来,这看起来并不太糟糕。更好地拥有一系列可读的,可管理的正则表达式,而不是一个通用的怪物,没有人(包括你自己)在几周后才会理解。
一个建议:
clean_value = $(this).val().toLowerCase().replace(/[^a-z0-9 -]+/g,'')
.replace(/^\s+|\s+$/g, '').replace(/ +/g,'-');
使最后replace()
执行您指定的操作 - 将一个或多个空格转换为单个短划线。
如果您仍然有多个破折号想要缩减为单个破折号,则可以添加
.replace(/-{2,}/, '-')
最后。
答案 1 :(得分:1)
如果将它拆分为两个单独的替换,那么修剪空白的部分实际上会更快。见:Faster JavaScript Trim。以下是我建议的方法:
function clean(text) {
return text.replace(/^\s+/,'').replace(/\s\s*$/,'').toLowerCase()
.replace(/[^a-z0-9\-\s]+/g,'').replace(/\s+/g,'-');
}
请注意,顺序对于避免多次破折很重要。