web-dev-qa-db-fra.com

regex string replace

J'essaie de remplacer une chaîne de base en utilisant une expression régulière, mais les réponses que j'ai trouvées ne semblent pas aider - elles répondent directement à chaque exigence unique de chaque personne avec peu ou pas d'explication.

J'utilise str = str.replace(/[^a-z0-9+]/g, ''); en ce moment. Mais ce que je voudrais faire, c'est autoriser tous les caractères alphanumériques (a-z et 0-9) ainsi que le caractère "-".

Pourriez-vous s'il vous plaît répondre à cela et expliquer comment vous concaténer des expressions.

19
Patrick

Cela devrait fonctionner:

str = str.replace(/[^a-z0-9-]/g, '');

Tout ce qui se trouve entre indique ce que vous cherchez

  1. / est là pour délimiter votre modèle afin que vous en ayez un pour commencer et un pour terminer
  2. [] indique le motif que vous recherchez sur un caractère spécifique
  3. ^ indique que vous voulez que chaque caractère ne corresponde pas à ce qui suit
  4. a-z correspond à n'importe quel caractère entre 'a' et 'z' inclus
  5. 0-9 correspond à tout chiffre compris entre "0" et "9" inclus (ce qui signifie tout chiffre)
  6. - le personnage
  7. g à la fin est un paramètre spécial disant que vous ne voulez pas que votre regex s'arrête sur le premier caractère correspondant à votre modèle mais continue sur toute la chaîne

Ensuite, votre expression est délimitée par / avant et après. Donc ici vous dites que "chaque caractère qui n'est pas une lettre, un chiffre ou un" - "sera supprimé de la chaîne".

35
koopajah

Changez simplement + à -:

str = str.replace(/[^a-z0-9-]/g, "");

Vous pouvez le lire comme:

  1. [^ ]: ne correspond pas à l'ensemble
  2. [^a-z0-9-]: correspond sinon a-z, 0-9 ou -
  3. / /g: faire une correspondance globale

Plus d'informations:

7
VisioN

Votre classe de caractères (la partie entre crochets) indique que vous voulez faire correspondre tout sauf 0-9 et a-z et +. Vous n'êtes pas explicite sur le nombre de a-z ou de 0 à 9 que vous souhaitez faire correspondre, mais je suppose que le + signifie que vous voulez remplacer les chaînes d'au moins un caractère alphanumérique. Il faut plutôt lire:

str = str.replace(/[^-a-z0-9]+/g, "");

De plus, si vous devez faire correspondre des lettres majuscules avec des minuscules, vous devez utiliser:

str = str.replace(/[^-a-zA-Z0-9]+/g, "");
1
Samuel