使用正则表达式提取句子中的最后几个单词?

时间:2016-03-06 05:30:42

标签: javascript regex

我正在尝试编写一个正则表达式来从句子中提取最后几个单词。但是,我似乎无法使其发挥作用。

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);
}   

我正试图得到“知更鸟”这个词。但我最终只有“引擎盖”。

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

我的正则表达式有什么变化?

4 个答案:

答案 0 :(得分:3)

为什么你需要正则表达式?你可以不用正则表达式来做到这一点

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

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

编辑:正则表达式解决方案

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

答案 1 :(得分:2)

/^Tell me about (\w+\s*)*/的问题是"Tell me about robin hood"的倍数匹配,即robin可能匹配,robin\s等等。重复字符有时可能会使您感到困惑,但是当您考虑所有匹配可能性时,它可以更清晰。 为了匹配Tell me about之后的所有内容,只需一次匹配即可轻松完成所有操作:(.*)

Regex demo

答案 2 :(得分:2)

这是一个正确的正则表达式:

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

与原来的

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

那太封闭了。关键是你应该使用非捕获组作为内括号并使用捕获组作为外括号。

请注意您的正则表达式中的(\w+\s*)*,它可能会在第一时间将robin捕获到\1,然后将hood覆盖为\1。所以,现在您可能会理解正则表达式引擎将以这种方式工作。

答案 3 :(得分:1)

试试这个

Tell me about ([\w\s]+)

Regex Demo

(\w+\s*)*将捕获'robin'然后'hood',但只保留最后一次迭代=> '罩'