Regex remplace toutes les virgules par de la valeur
J'ai une chaîne qui ressemble à ceci: "Doe, John," (nom, prénom, initiale du second prénom).
Je suis en train d'écrire une expression régulière qui convertit la chaîne en "Doe*Jean*Un".
Cependant, je dois prendre en compte tous les espaces de cette chaîne afin d' "Doe , John ," devrait toujours convertir en "Doe*Jean*Un".
AUSSI, la chaîne "John Doe" convertir en "Doe*Jean*Un".
J'ai commencé à écrire cela, mais je pense que je suis bloqué sur les espaces & la possibilité pour l'utilisateur ne fournit pas les virgules.
Voici ce que j'ai:
var myString = "John, Doe, A";
var myOtherString = "John Doe A";
var myFunction = function (aString) {
aString = aString.replace(", ", "*");
aString = aString.replace(", ", "*");
return aString;
};
Ces devrait à la fois le retour "Doe*John*A"
.
Je pense que je vais me répéter un peu trop dans cette fonction. Je suis aussi en ne prenant pas en compte la possibilité qu'aucune des virgules seront fournis.
Est-il une meilleure façon de le faire?
source d'informationauteur Jeff | 2012-12-19
Vous devez vous connecter pour publier un commentaire.
Oui, il est. Utiliser le
replace
fonction avec une regex à la place. Qui a quelques avantages. Tout d'abord, vous n'avez pas à appeler deux fois plus. Deuxièmement, il est vraiment facile à compte pour une quantité arbitraire d'espaces et une option de virgule:Noter que les crochets qui entourent les espaces sont optionnels, mais je trouve qu'ils font de l'espace des caractères plus lisibles. Si vous souhaitez autoriser/enlever tout type d'espaces (tabulations et les sauts de ligne, trop), utilisez
\s
à la place:Noter que dans les deux cas, nous ne pouvons tout simplement pas faire la virgule en option, parce que cela permettrait de largeur nulle correspond à, ce qui permettrait d'introduire une
*
à chaque position dans la chaîne. (Merci à CruorVult pour le signaler)Si vous souhaitez remplacer l'ensemble des non-caractères de mot essayez ceci:
Chaîne.remplacez-la uniquement remplace la première occurrence. Pour les remplacer, ajouter le "g" drapeau "global". Vous pouvez également utiliser des groupes de caractères et l'opérateur +(un ou plusieurs) pour faire correspondre les chaînes de caractères:
Ce sera de remplacer toutes les chaînes de virgules et des espaces avec un
*
.Essayer de supprimer tous les espaces et les virgules, puis de les remplacer par des *.
Myname= myname.replace(/[,\s]/,"*")
Editted que la suppression de " au moins deux éléments de la répétition. Mais au moins sur le point.
Myname= myname.replace(/([,\s]{1,})/,"*")
Référence: sur Rublar. Cependant, vous êtes mieux avec regexpal que par m.buettner 🙂