[英]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);
/^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
。 因此,现在您可能已经知道正则表达式引擎将以这种方式工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.