2010-07-05 4 views
11

Nous utilisons les js suivantes/regex pour rechercher et remplacer tous les caractères non alphanumériques à part - et +RegEx (en JavaScript find/remplacer) - correspondent à des caractères non-alphanumériques, mais ignorer - et +

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

Cependant, cela ne fonctionne pas entièrement - il ne remplace pas le^et | personnages. Je ne peux pas m'empêcher de me demander si c'est quelque chose à voir avec le^et | étant utilisé comme méta-caractères dans l'expression régulière lui-même.

J'ai essayé de passer à utiliser [\W|^+|^-], mais cela remplace les - et +. Je pensais que peut-être une affirmation lookahead peut être la réponse, mais je ne suis pas très sûr de la façon de les mettre en œuvre.

Quelqu'un at-il une idée de comment accomplir cela?

Répondre

16

classes de caractères ne font pas l'alternance, donc pourquoi le | est littéral, et le ^ doivent être au début de la classe pour prendre effet (sinon il est traité littéralement.)

Utilisez ceci:

[^\w+-]+ 

(De plus, si - n'est pas le dernier, il doit être échappé sous la forme \- à l'intérieur d'une classe de caractères - faites donc attention à ce que plus de caractères soient ajoutés à la liste d'exceptions).

Vous pouvez aussi le faire avec un préanalyse négatif comme celui-ci:

(?![+-])\W 

Note: Vous ne voulez pas un * ou + après \W, puisque le préanalyse applique uniquement au caractère immédiatement après (et le drapeau g fait répéter le remplacement jusqu'à ce que vous ayez terminé).

Notez également que \w et \W considèrent _ comme un caractère de mot. Si cela n'est pas souhaité, remplacez-le par (?![+-])[\W_] (ou utilisez des plages explicites dans les premières expressions).

+0

Salut Peter, merci - c'est génial. [^\w+-]+ a travaillé tout simplement génial! Et merci pour les informations supplémentaires - très utile. –

Questions connexes