2013-09-21 101 views
8

Ho una stringa in cui ho bisogno di sostituire tutti i caratteri speciali "~! @ # $%^& *() _ + =` {} [] | :;' <>,. /? " e spazi con trattini. Più caratteri speciali in una riga dovrebbero risultare in un trattino singolo.Regex per la sostituzione di tutti i caratteri speciali e spazi in una stringa con trattini

var mystring="Need [email protected]#$%^\" to /replace this*(){}{}|\><? with_new string "; 
// desired output: "Need-to-replace-this-with-new-string" 

Attualmente, sto usando questa serie di replace() chiamate:

return mystring.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-').replace(/\//g, "-"); 

ma è l'output di questo:

Need----------to/replace-this--------with-new-string; 

dove è l'aggiunta di un trattino per ogni carattere speciale nel stringa tranne la barra diretta.

+0

Definisci "tutti i caratteri speciali" sono tutti caratteri non alfanumerici? Un sottoinsieme di quelli? Al minimo * potresti pubblicare un esempio stringa di input e stringa di output, senza che le istruzioni/i requisiti siano presenti all'interno di una stringa? Rende molto confuso cercare di leggere/capire. –

+0

caratteri da rimuovere "~! @ # $%^& *() _ + =' {} [] | \ :; '<>,. /? " e lo spazio e questi devono essere tutti sostituiti con trattino, la stringa è alfanumerica – user2643287

+0

Tutti con un trattino * singolo * nei posti in cui appaiono quei caratteri, o con un trattino per * ogni carattere * che viene sostituito? –

risposta

13

Io suggerirei:

var inputString = "[email protected]#$%^&*()_+=`{}[]|\:;'<>,./?Some actual text to keep, maybe...", 
    outputString = inputString.replace(/([[email protected]#$%^&*()_+=`{}\[\]\|\\:;'<>,.\/? ])+/g, '-').replace(/^(-)+|(-)+$/g,''); 
console.log(outputString); 

JS Fiddle demo.

7

Andando da un commento e con l'esempio:

return mystring.trim().replace(/["[email protected]#$%^&*\(\)_+=`{}\[\]\|\\:;'<>,.\/?"\- \t\r\n]+/g, '-'); 

o per sostituire tutti caratteri non alfanumerici:

return mystring.trim().replace(/[^a-z0-9]+/gi, '-'); 

Si potrebbe anche aggiungere:

.replace(/^-+/, '').replace(/-+$/, ''); 

per uccidere da qualsiasi trattino iniziale o finale (a quel punto tu non è più necessario chiamare trim()).

Esempio:

function cleanUp(st) { 
 
    return st. 
 
    replace(/[^a-z0-9]+/gi, '-'). 
 
    replace(/^-+/, ''). 
 
    replace(/-+$/, ''); 
 
} 
 

 
var mystring="Need [email protected]#$%^\" to /replace this*(){}{}|\><? with_new string "; 
 

 
console.log(cleanUp(mystring));

+1

Il secondo è una risposta pulita :) – Tabares

+0

Come sostituire stringhe unicode come घर-घरमा ग्यास पाइपः कार्यान्वयनको जिम्मा ओलीकै काँधमा –

+0

Questa è una domanda diversa e più difficile. Suggerirei [chiedere] (https://stackoverflow.com/questions/ask) come una nuova domanda. –

Problemi correlati