2011-03-31 16 views
0

我正在寫一個javascript正則表達式來將一個字符串變成一個短名稱(用於乾淨的URL)。我需要它:細化我的JavaScript REGEX來格式化一個短名稱

  • 將其轉換爲小寫
  • 地帶的所有「壞」字
  • 修剪所有前導和尾隨空白
  • 取代單和多空間的衝刺。

這是我有什麼到目前爲止(增加了可讀性換行):

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

這不,但我知道有一種更有效的方式來形成這些REGEXs ...我是如此糟糕與他們並花了一個小時,試圖找出如何儘可能結合這些。

任何幫助將不勝感激!

+0

http://www.regexpal.com是測試REGEXs的優秀資源。你現場測試REGEXs,看看有什麼比賽等等。 – Eli 2011-03-31 04:28:36

+0

@Eli是的,我有書籤...非常有用。這種菊花鏈式的方法工作...但我試圖找到一個更優雅的方式來處理格式。特別是因爲上面的代碼並未處理連續的多個破折號,即「我的---項目」 – RANGER 2011-03-31 04:37:27

回答

1

這在我看來並不糟糕。最好有一系列可讀,可管理的正則表達式,而不是一個通用怪物,從現在起幾個星期內沒人(包括你自己)會理解。

一個建議:

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

做出最後replace()你指定什麼 - 將一個或多個空格成一個單一的破折號。

如果您還有要減少到一個單一的一個連續多短線,你可以在末尾添加一個

.replace(/-{2,}/, '-') 

1

如果將其分割成兩個單獨的替換,修剪空白的部分實際上會更快。參見:Faster JavaScript Trim。以下是我建議做它:

function clean(text) { 
    return text.replace(/^\s+/,'').replace(/\s\s*$/,'').toLowerCase() 
     .replace(/[^a-z0-9\-\s]+/g,'').replace(/\s+/g,'-'); 
} 

請注意,以避免多個破折號的順序很重要。