Je veux être en mesure de détecter/décortiquer les chaînes comme:question Javascript regroupement regex
billets à l'entrée par personne
Ballons pp
plantation d'arbres
-à-dire une description suivie un optionnel "pp" ou "par personne"
J'essaie (.+)\s+(per person|pp)
et cela fonctionne; mais le suffixe pp|per person
n'est pas facultatif.
J'essaye (.+)\s+(per person|pp)?
ou (.+)\s+(per person|pp){0,1}
pour le rendre facultatif, mais alors je suis "indéfini pour le deuxième groupe de capture". Curieusement le premier groupe de capture contient la "per":
matches: 0: (billets à l'entrée per)
1: (billets à l'entrée per)
2: (indéfini)(testé par http://www.regextester.com/ testeur de regex en ligne)
Qu'est-ce que je fais de mal avec ce deuxième groupe de capture?
: Belles œuvres. Je vous remercie ! – user456613
Il s'avère que ce n'est pas tout à fait ce dont on a besoin après tout. Le "caractère espace" requis au milieu ne sera pas présent lorsque la chaîne ne contient pas le suffixe "pp | per person". – user456613
J'ai parlé trop tôt. J'ai essayé ^ (. +) \ S + (par personne | pp |) $ qui fonctionne (notez le \ s + vs le suggéré \ s *), mais nécessite un espace de fin si le | pp par personne pas le suffixe Ainsi, par exemple: « plantation d'arbres » ne sera pas compensée par cette expression régulière, bien que « plantation d'arbres » (notez l'espace de fuite) sera. L'expression régulière que vous avez suggérée: ^ (. +) \ S * (par personne | pp |) $ Ne fonctionne pas parce que le premier groupe est gourmand et renvoie toute la chaîne, par exemple. "ballons par personne" retours 1: (ballons par personne) 2:() au lieu de ce que je veux ce qui est: 1: (ballons) 2: (par personne) – user456613