J'essaie de diviser une chaîne en une gamme de mots, mais je veux garder les espaces après chaque mot. Voici ce que j'essaie: Les résultats que j'attends sont les suivants: p> Cependant, il ne correspond que dans un espace après chaque mot: p> Qu'est-ce que je fais mal? P> p>
5 Réponses :
Essayez ce qui suit:
test.match(/\w+\s+/g); // \w = words, \s = white spaces
Ou si le dernier bit de WhitSpace est facultatif: test.match (/ \ w + \ s * / gi) code>
@Wolph: Pourquoi le drapeau insensible aux cas?
Cela divisera "Je codir" dans "i", "m" et "coding".
@Dandascalescu: aucune raison spécifique, plus une habitude vraiment
Cela fonctionne mal et "mange" des mots si vous essayez la phrase suivante: La lune est notre satellite naturel, c'est-à-dire qui tourne autour de la terre! I>
Vous utilisez + code> à l'intérieur de la classe de char. Essayez d'utiliser * code> en dehors de la classe de caractères. /[a-z]+\s*/gi;
Le + code> est pris littéralement à l'intérieur de la classe de caractères. Vous devez le déplacer à l'extérieur: [\ s] + code> ou juste \ s + code> ( $ code> n'a aucune signification à l'intérieur de la classe). p>
considérer: qui garantirait que vous ne manquez aucun caractère (en plus de quelques espaces aux débuts, mais Votre regex d'origine lit: p> \ s * \ s * code> peut Prenez soin de cela) p>
[a-z] + code> - correspond à n'importe quel nombre de lettres (au moins une) li>
[$ \ s +] code> - beaucoup un seul caractère - $ code>, + code> ou whitespace. Sans quantifier après ce groupe, vous ne correspondez à un seul espace. LI>
ul> p>
Le bit essentiel de votre regex qui a besoin de changer est la partie correspondant à la touche blancheure ou fin de ligne.
Essayez: p> ou, pour groupes non capturant (je ne sais pas si vous en avez besoin avec le / g code> drapeau): p>
Si vous avez besoin de garder l'espace, pourquoi ajouter
$ code> et+ code> dans la deuxième classe?