2012-12-05 2 views
12

J'essaye de faire une chaîne de base remplacer en utilisant une expression regex, mais les réponses que j'ai trouvées ne semblent pas aider - ils répondent directement à chaque exigence de personne avec peu ou pas d'explication. J'utilise str = str.replace(/[^a-z0-9+]/g, ''); pour le 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 '-'.string regex remplacer

Pourriez-vous répondre à cette question et expliquer comment concaténer les expressions.

+0

Utilisez un caractère d'échappement '\ -' pour spécifier le' -' à l'intérieur des crochets. Cela s'assurera que l'analyseur interprète le '-' comme un caractère littéral et non comme un caractère spécial indiquant une plage. –

+0

Qu'est-ce que jQuery a à voir avec cela? Regex et le remplacement de chaîne sont les deux parties du langage, jQuery ne s'implique pas. Retrait de cette étiquette si je me trompe, n'hésitez pas à revenir en arrière. – ssube

Répondre

22

Cela devrait fonctionner:

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

Tout ce qui est entre les indique ce que vous cherchez

  1. / est ici pour délimiter votre modèle afin que vous en avez un pour commencer et un à la fin
  2. [] indique le modèle de votre recherchent sur un caractère spécifique
  3. ^ indique que vous voulez tous les caractères ne correspondant pas à ce qui suit
  4. a-z correspond à tout caractère entre 'a' et 'z' inclus
  5. 0-9 correspond à un chiffre entre '0' et '9' inclus (ce qui signifie un chiffre)
  6. - le caractère '-'
  7. g à la fin est un paramètre spécial dire que vous ne voulez pas vous regex arrêter sur le premier caractère correspondant à votre modèle, mais de continuer sur toute la chaîne

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

1

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

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

En outre, si vous avez besoin de faire correspondre les lettres majuscules avec minuscules, vous devez utiliser:

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