11
votes

Splitting String dans une matrice de mots utilisant des expressions régulières

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: xxx

Les résultats que j'attends sont les suivants: xxx

Cependant, il ne correspond que dans un espace après chaque mot: xxx

Qu'est-ce que je fais mal?


1 commentaires

Si vous avez besoin de garder l'espace, pourquoi ajouter $ et + dans la deuxième classe?


5 Réponses :


3
votes

Essayez ce qui suit:

test.match(/\w+\s+/g); // \w = words, \s = white spaces


5 commentaires

Ou si le dernier bit de WhitSpace est facultatif: test.match (/ \ w + \ s * / gi)


@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!



1
votes

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;


0 commentaires

0
votes

Le + est pris littéralement à l'intérieur de la classe de caractères. Vous devez le déplacer à l'extérieur: [\ s] + ou juste \ s + ( $ n'a aucune signification à l'intérieur de la classe).


0 commentaires

12
votes

considérer: xxx

qui garantirait que vous ne manquez aucun caractère (en plus de quelques espaces aux débuts, mais \ s * \ s * peut Prenez soin de cela)

Votre regex d'origine lit:

  • [a-z] + - correspond à n'importe quel nombre de lettres (au moins une)
  • [$ \ s +] - beaucoup un seul caractère - $ , + ou whitespace. Sans quantifier après ce groupe, vous ne correspondez à un seul espace.

0 commentaires

0
votes

Le bit essentiel de votre regex qui a besoin de changer est la partie correspondant à la touche blancheure ou fin de ligne.

Essayez: xxx

ou, pour groupes non capturant (je ne sais pas si vous en avez besoin avec le / g drapeau): xxx


0 commentaires