2012-11-03 6 views
6

Ho bisogno di un aiuto per sostituire tutti i caratteri non di una stringa.Sostituisci tutti i caratteri non parola come? * + #

Ad esempio (stadtbezirkspräsident' deve essere stadtbezirkspräsident.

Questo Regex dovrebbe funzionare per tutte le lingue, quindi è un po 'complicato perché non ho idea di come abbinare caratteri come ñ o œ. Ho provato a risolvere questo con

string.replace(/[&\/\\#,+()$~%.'":*?<>-_{}]/g,' '); 

ma ther sono ancora molti caratteri speciali come Ø sinistra.

Forse c'è un Selettore generale per questo, o qualcuno ha già risolto questo problema prima?

+0

Ø è una lettera in varie lingue (danese, ad esempio) :) –

+0

simile: [questo] (http://stackoverflow.com/questions/2392194/how-to-match-the-international-alphabet-english -az-non-inglese-with-a-regu) domanda. regex javascript non ha alcun nativo compatibile con Unicode –

risposta

6

Se si dispone di definire tutti i Unicode spazia da soli, sta andando ad essere un sacco di lavoro.

potrebbe avere più senso utilizzare Steven Levithan di XRexExp package with Unicode add-ons e utilizzare le sue scorciatoie proprietà Unicode:

var regex = new XRegExp("\\P{L}+", "g") 
string = XRegExp.replace(string, regex, "") 
+1

@ Ωmega: Grazie per la modifica! –

+1

thx !!!! : D XRegExp è davvero incredibile! –

6

tenta di utilizzare trucco

str.replace(/(?!\w)[\x00-\xC0]/g, '') 
+1

'\ w' non è compatibile con le impostazioni internazionali o con Unicode. –

+0

@TimPietzcker - Lo so, ma la mia soluzione rimuove solo i caratteri speciali nella gamma dei bassi esadecimali solo –

+1

(Sì, non l'hai modificato proprio mentre stavo scrivendo il mio commento?) - OK, ma ci sono ancora abbastanza caratteri che non lo faranno essere catturato da questo (anche all'interno del set ANSI a 8 bit: '×' e '÷' venite in mente). –

1

Questo è più di un commento alla risposta di Tim Pietzcker, ma presentando il codice nei commenti è imbarazzante ... Ecco un semplice esempio di utilizzo del pacchetto XRexExp:

<p id=orig>Bundespräsident/ß+ð/ə¿α!</p> 
<p id=new></p> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-min.js"> 
</script> 
<script src="http://xregexp.com/addons/unicode/unicode-base.js"> 
</script> 
<script> 
var regex = new XRegExp("\\P{L}+", "g"); 
var string = document.getElementById('orig').innerHTML; 
string = XRegExp.replace(string, regex, ""); 
document.getElementById('new').innerHTML = string; 
</script> 

per l'uso in produzione, si sarebbe probabilmente vuole scaricare alcune versioni del pacchetto base e il plug-in Unicode e utilizzarli sul vostro server.

Nota: il codice verifica la presenza di caratteri non classificati come lettere (alfabetici) in Unicode. Suppongo che ciò corrisponda a ciò che intendi per "carattere di parola", sebbene le parole in un linguaggio naturale possano contenere trattini, apostrofi e altre non lettere.

Attenzione che i caratteri vengono aggiunti a Unicode e la categoria di un personaggio potrebbe cambiare (raramente). Il pacchetto è stato mantenuto bene, però; corrisponde a Unicode 6.1 (la versione 6.2 è fuori, ma non ha nuove lettere).