繁体   English   中英

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

[英]Extract the last few words in a sentence using 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' ]  

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

为什么为此需要正则表达式? 您可以在不使用正则表达式的情况下进行操作

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

/^Tell me about (\\w+\\s*)*/"Tell me about robin hood"多个匹配项,即robin是可能的匹配项,还有robin\\s等。 重复字符有时可能会使您感到困惑,但是当您考虑所有匹配可能性时,它会更加清晰。 要匹配所有后续内容, Tell me about您只需简单地一次完成所有匹配即可: (.*)

正则表达式演示

这是正确的正则表达式:

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

与您的原始版本相比

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

太封闭了 关键是您应该将非捕获组用于内部支架,将捕获组用于外部支架。

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

尝试这个

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

正则表达式演示

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM