2012-09-11 16 views
7

è possibile effettuare un'espressione regolare con più delimitatori? Ad esempio, voglio dividere una stringa che può venire in due forme: 1. "stringa1, stringa2, stringa3" o 2. "stringa1, stringa2, stringa3". Ho cercato di farlo in javascript ma senza risultati fino ad ora.espressioni regolari per virgola seguita da spazio o solo virgola

+2

Vuoi dire ', \ s *'? – GolezTrol

+1

Che ne dici di ', \ s |,'? Abbinerà solo uno spazio. – boring

risposta

20

Basta usare un espressione regolare split():

var string = "part1,part2, part3, part4, part5", 
    components = string.split(/,\s*/); 

JS Fiddle demo.

Il motivo per cui ho utilizzato * anziché ? è semplicemente perché non consente spazi vuoti o molti spazi bianchi. Considerando che lo ? corrisponde allo zero-o-uno spazio bianco (che è esattamente quello che hai chiesto, ma anche così).

Per inciso, se ci potrebbe eventualmente essere gli spazi vuoti che precedono la virgola, allora potrebbe essere opportuno che modifica la split() regex per:

var string = "part1,part2 , part3, part4, part5", 
    components = string.split(/\s*,\s*/); 
console.log(components);​ 

JS Fiddle demo.

Che divide la stringa fornita su zero o più spazi bianchi seguita da una virgola seguita da zero o più spazi bianchi. Questo, ovviamente, potrebbe essere del tutto inutile.

Riferimenti:

+1

@DanielV :: +1 :: Questa soluzione è quella che dovrebbe essere accettata, poiché la stringa di input può essere ad esempio 'stringa1, stringa2, stringa3, stringa4, stringa5' e Il codice di Silva non ce l'avrebbe fatta. –

5

Sì, rendono lo spazio bianco (\s) opzionale con ?:

var s = "string1,string2,string3"; 
s.split(/,\s?/); 
+0

funziona alla grande, grazie. accetterò la risposta non appena mi consentirà di – DVM

1

Oltre a silva

nel caso in cui si dispone di dubbio che essa può avere più di uno spazio quindi utilizzare (o nessuno spazio)

var s = "string1, string2, string3"; 
s.split(/,\s*/); 
Problemi correlati