2012-10-22 15 views
23

Voglio rimuovere tutti i caratteri e gli spazi speciali da una stringa e sostituirli con il carattere di sottolineatura. La stringa èrimuovere simboli speciali e spazi aggiuntivi e sostituirli con underscore usando il metodo di sostituzione

var str = "hello world & hello universe"; 

ho questo ora che sostituisce solo spazi

 str.replace(/\s/g, "_"); 

Il risultato che ottengo è hello_world_&_hello_universe, ma vorrei rimuovere i simboli speciali.

Ho provato questo str.replace(/[^a-zA-Z0-9]\s/g, "_") ma questo non aiuta.

risposta

50

La tua espressione regolare [^a-zA-Z0-9]\s/g dice corrispondere a qualsiasi carattere che non sia un numero o una lettera seguito da uno spazio.

Rimuovi \ s e dovresti ottenere quello che cerchi se vuoi un _ per ogni carattere speciale.

var newString = str.replace(/[^A-Z0-9]/ig, "_"); 

che si tradurrà in hello_world___hello_universe

Se si vuole che sia singole sottolineature utilizzano un + per abbinare multipla

var newString = str.replace(/[^A-Z0-9]+/ig, "_"); 

Ciò si tradurrà in hello_world_hello_universe

2

Rimuovere il \s dalla nuova espressione regolare e dovrebbe funzionare: lo spazio bianco è già incluso in "qualsiasi cosa tranne i caratteri alfanumerici".

Si noti che è possibile aggiungere unodopo il ] in modo da non ottenere sequenze di più di un carattere di sottolineatura. È anche possibile concatenare .replace(/^_+|_+$/g,'') per eliminare i caratteri di sottolineatura all'inizio o alla fine della stringa.

+0

Perché chiamare separata 'sostituire 'quando puoi aggiungere' + 'nella prima regex? – MBO

+0

Perché ... buon punto. Stavo pensando ad altro, credo. Eppure, potresti incatenarti a una regex simile a un trim. –

Problemi correlati