J'essaie d'écrire une expression régulière pour extraire les derniers mots d'une phrase. Cependant, je n'arrive pas à le faire fonctionner.

var str = "Tell me about robin hood";
const TELL_ME_ABOUT_REGEX = /^Tell me about (\w+\s*)*/
if( str.match(TELL_ME_ABOUT_REGEX) ){
    var matches = TELL_ME_ABOUT_REGEX.exec( str );
    console.log( "user wants to know about ",matches);
}   

J'essaie d'obtenir le mot "Robin Hood". Mais je ne me retrouve qu'avec "capuche".

[ 'Tell me about robin hood',
  'hood',
  index: 0,
  input: 'Tell me about robin hood' ]  

Que dois-je changer dans mon expression régulière?

0
Little Child 6 mars 2016 à 08:30

3 réponses

Meilleure réponse

Voici une expression rationnelle correcte:

^Tell me about ((?:\w+\s*)*)

Comparez à votre original qui est

^Tell me about (\w+\s*)*

C'est tellement fermé. Le fait est que vous devez utiliser le groupe sans capture pour un support interne et le groupe de capture pour un support externe.

Notez que (\w+\s*)* à partir de votre expression régulière, il peut capturer robin à \1 à la première fois, puis écrase hood à \1. Donc, maintenant, vous pourriez comprendre que le moteur regex fonctionnera de cette façon.

2
fronthem 6 mars 2016 à 07:10

Le problème avec /^Tell me about (\w+\s*)*/ est qu'il y a plusieurs correspondances pour "Tell me about robin hood", c'est-à-dire que robin est une correspondance possible, ainsi que robin\s et ainsi de suite. Les caractères de répétition peuvent parfois vous dérouter, mais lorsque vous pensez à toutes les possibilités de correspondance, cela peut être plus clair. Pour faire correspondre tout ce qui est venu après Tell me about, vous pouvez simplement tout obtenir en une seule fois, avec une seule correspondance possible: (.*).

Démo Regex

2
Luana Pimentel 6 mars 2016 à 05:58

Pourquoi avez-vous besoin d'expressions régulières pour cela? Vous pouvez le faire sans regex comme ça

var str = "Tell me about robin hood";
var str = str.split(" ").splice(3).join(" ");
alert(str);

http://codepen.io/anon/pen/aNvrYz

Modifier: solution Regex

var str = "Tell me about robin hood";

var match =  str.match(/^Tell me about (.*)/i);
var textInDe = match[1]; 
alert(textInDe);

http://codepen.io/anon/pen/BKoerY

3
Praveen 6 mars 2016 à 05:40