2012-07-16 23 views
0

我使用JavaScript將我的字符串轉換爲URL的一個很好的固定鏈接,但我有一個小問題,當我使用duble或更多的空間將其轉換爲 - 更多,如果我最終使用它這個字符串的其它來代替 - 對,這樣Javascript-Permalinks轉換

this---is---a-test-right-now---- 

我想有回,如果我得到這個字符串遵循

this-is-a-test-right-now 

可以sombardy幫助我在這裏?

我自己的JavaScript看起來像這樣

function prototype(str) 
{ 
    var ret = str; 
    ret = ret.replace(/ø/g, 'oe'); 
    ret = ret.replace(/Ø/g, 'OE'); 
    ret = ret.replace(/å/g, 'aa'); 
    ret = ret.replace(/Å/g, 'AA'); 
    ret = ret.replace(/æ/g, 'ae'); 
    ret = ret.replace(/Æ/g, 'AE'); 
    ret = ret.replace(/\_/g, '-'); 

    ret = ret.replace(/[^a-zA-Z0-9\/-]/ig,'-').replace(/_+/ig,'-').toLowerCase(); 

    return ret; 
} 

回答

1

添加一個更加鏈取代將完成這項工作,通過尋找的-更出現超過兩次通過一個-

replace(/[-]{2,}/g, '-') 

更換上面的例子將尋找-兩次以上的發生並替換爲單個-並且它做到globally以實現它

function prototype(str) 
{ 
    var ret = str; 
    ret = ret.replace(/ø/g, 'oe'); 
    ret = ret.replace(/Ø/g, 'OE'); 
    ret = ret.replace(/å/g, 'aa'); 
    ret = ret.replace(/Å/g, 'AA'); 
    ret = ret.replace(/æ/g, 'ae'); 
    ret = ret.replace(/Æ/g, 'AE'); 
    ret = ret.replace(/\_/g, '-'); 

    ret = ret.replace(/[^a-zA-Z0-9\/-]/ig,'-').replace(/_+/ig,'-').replace(/[-]{2,}/g, '-').toLowerCase(); 

    return ret; 
} 
+0

非常感謝:) – ParisNakitaKejser 2012-07-16 09:58:26

1

最簡單的方法是用單破折號替換任何連續出現,而不是用破折號替換每個發生的。

ret = ret.replace(/[^a-z0-9_\/]+/ig,'-').replace(/-+$/,'').toLowerCase(); 

第二個正則表達式可以去掉尾部的破折號。

另請注意,A-Z是不必要的,因爲i修飾符使正則表達式不區分大小寫。您還可以將前面的行縮短爲例如因爲無論如何你都將字符串轉換爲小寫字母。

+0

非常感謝:) – ParisNakitaKejser 2012-07-16 09:58:44