我正在尝试编写一个正则表达式来从句子中提取最后几个单词。但是,我似乎无法使其发挥作用。
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' ]
我的正则表达式有什么变化?
答案 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);
答案 1 :(得分:2)
/^Tell me about (\w+\s*)*/
的问题是"Tell me about robin hood"
的倍数匹配,即robin
可能匹配,robin\s
等等。重复字符有时可能会使您感到困惑,但是当您考虑所有匹配可能性时,它可以更清晰。
为了匹配Tell me about
之后的所有内容,只需一次匹配即可轻松完成所有操作:(.*)
。
答案 2 :(得分:2)
这是一个正确的正则表达式:
^Tell me about ((?:\w+\s*)*)
与原来的
比较^Tell me about (\w+\s*)*
那太封闭了。关键是你应该使用非捕获组作为内括号并使用捕获组作为外括号。
请注意您的正则表达式中的(\w+\s*)*
,它可能会在第一时间将robin
捕获到\1
,然后将hood
覆盖为\1
。所以,现在您可能会理解正则表达式引擎将以这种方式工作。
答案 3 :(得分:1)