2011-05-25 88 views
0

我有一個正則表達式,它用連字符替換所有非字母數字字符。JavaScript正則表達式替換如果發生多次n

slugName = $(this).val().replace(/[^a-z0-9]/gi, '-'); 

這工作,因爲它應該,但因爲這是從用戶的輸入產生的,我最終可能會像my-awesome-title---stuff結果本來可以輸入爲my awesome title & stuff

正如你看到的,我現在有三個連續的連字符並不真正吸引人作爲一個漂亮的URL。

如果有連續的連字符行,有什麼方法可以替代這種情況?

+0

也願意削減從連字符。邊緣? '-still-not-pretty -' – Kobi 2011-05-25 12:53:11

+0

最好,是的。 – James 2011-05-25 12:54:15

+0

學習正則表達式的好源碼:http://www.regular-expressions.info/ – 2011-05-25 12:56:52

回答

6

事情是這樣的:

slugName = $(this).val().replace(/[^a-z0-9]+/gi, '-'); 

應該取代它們的非字母數字與1個連字符的一個或多個實例。在這種情況下的'+'意味着一個或多個實例。

+0

+1,爲更快的手指:-) – 2011-05-25 12:52:08

+0

+1爲同樣的原因:) – 2011-05-25 12:54:23

+0

謝謝!我可以在6分鐘內接受你的答案! – James 2011-05-25 12:56:36

2

使用另一個正則表達式崩潰多個破折號:

slugName = slugName.replace(/-+/g, '-'); 
+0

附加的'replace'沒有必要,只需在cahr類定義之後加上'+':'[^ a-z0-9 ] +' – 2011-05-25 12:53:51

+0

也是如此,對於npinti的回答+1。 :-) – 2011-05-25 13:00:52

0

只需更換連字符的連續串只用一個

slugName = $(this).val().replace(/[^a-z0-9]/gi, '-').replace(/[\-]+/g, '-') 
+0

在附加的'replace'中沒有必要,只需在cahr類定義之後添加'+':'[^ a-z0-9 ] +' – 2011-05-25 12:54:09

+0

看到其他人,不需要額外的替換,顯然我們可以添加一個'+',似乎停止了倍數或什麼? – James 2011-05-25 12:55:38

+0

是的,你是對的,我很快就回答,沒有想到最簡單的解決方案。 – Andrea 2011-05-25 13:32:37

1

添加+爲char類:

'my awesome title & stuff'.replace(/[^a-z0-9]+/gi, '-') 

結果:

"my-awesome-title-stuff"