2010-07-05 3 views
11

Abbiamo utilizzato il seguente js/regex per trovare e sostituire tutti i caratteri non alfanumerici a parte - e +RegEx (in JavaScript trovare/sostituire) - Partita di caratteri non alfanumerici, ma ignora - e +

outputString = outputString.replace(/[^\w|^\+|^-]*/g, "");

Tuttavia non funziona del tutto - non sostituisce il^e | personaggi. Non posso fare a meno di chiedermi se questo è qualcosa a che fare con^e | essere usato come meta-caratteri nella regex stessa.

Ho provato a utilizzare [\W|^+|^-], ma sostituisce - e +. Ho pensato che una possibile affermazione del lookahead potesse essere la risposta, ma non sono molto sicuro di come implementarli.

Qualcuno ha avuto un'idea di come realizzare questo?

risposta

16

classi di caratteri non fanno alternanza, quindi, perché il | è letterale, e la ^ devono essere al via della classe abbia effetto (altrimenti è trattata letteralmente.)

Utilizzare questa:

[^\w+-]+ 

(Inoltre, se - non è l'ultimo, è necessario eseguire l'escape come \- all'interno di una classe di caratteri, quindi fai attenzione se altri caratteri potrebbero essere aggiunti all'elenco delle eccezioni).

Si potrebbe anche fare con un lookahead negativo come questo:

(?![+-])\W 

Nota: Se non si desidera un * o + dopo che \W, dal momento che il lookahead si applica solo al immediatamente successivo carattere (e il flag g fa ripetere la sostituzione fino al completamento).

Si noti inoltre che \w e \W considerano _ come un carattere di parola. Se ciò non è desiderato, per sostituire è possibile utilizzare (?![+-])[\W_] (o utilizzare intervalli espliciti nelle prime espressioni).

+0

Ciao Peter, grazie - è grandioso. [^\w+-]+ ha funzionato alla grande! E grazie per le informazioni aggiuntive - molto utile. –