优化我的javascript REGEX以格式化短名称

时间:2011-03-31 04:27:20

标签: javascript regex

我正在编写一个javascript正则表达式,将字符串转换为短名称(用于干净的URL)。我需要它:

  • 将其转换为小写
  • 剥去所有“坏”字符
  • 修剪所有前导和尾随空格
  • 替换短划线的单个和多个空格。

这是我到目前为止所提供的内容(为了便于阅读而添加了新行):

clean_value = $(this).val().toLowerCase().replace(/[^a-z0-9 -]+/g,'')
              .replace(/^\s+|\s+$/g, '').replace(/ +(?= )/g,'-')
              .replace(/ /g, '-');

这样做但是我知道有一种更有效的方式来形成这些REGEX ......我对它们非常糟糕,花了一个小时试图找出如何尽可能地组合它们。

非常感谢任何帮助!

2 个答案:

答案 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,'-');
}

请注意,顺序对于避免多次破折很重要。