2009-12-02 13 views
11

Ho bisogno di un'espressione regolare per dividere una stringa con virgole e/o spazi, ma ignorare le parole con trattino - qual è il modo migliore per farlo?regexp divide la stringa con virgole e spazi, ma ignora le parole con trattino?

così, per esempio - Vorrei questo ...

"foo bar, zap-foo, baz".split(/[\s]+/) 

per tornare

["foo", "bar", "zap-foo", "baz"] 

ma quando lo faccio che include le virgole come questo ...

["foo", "bar,", "zap-foo,", "baz"] 

risposta

29

"foo bar, zap-foo, baz".split(/[\s,]+/)

+1

'[ "foo", "bar", "baz" "zap-foo",] 'è l'output ma possiamo ** NON ** dividere' ["foo bar"] 'come' ["foo" e "bar"] ' – carbonr

5

È possibile specificare una classe di caratteri che dice di dividere su elementi che non sono trattini o caratteri di parole:

"foo bar, zap-foo, baz".split(/[^\w-]+/) 

Oppure è possibile dividere solo su spazi e virgole utilizzando una classe di caratteri come quella Ocson has provided.

2

Oppure, se volete essere veramente espliciti i separatori:

"foo bar, zap-foo, baz".split(/ |, |,/) 

=> ["foo", "bar", "zap-foo", "baz"] 
2
"foo bar, zap-foo, baz".split(/[\s.,]+/) 
+0

use" all'inizio – Amit

Problemi correlati