我想找到最后一次出现在"和#34;之间的文字。在一个句子和另一个词"玛丽"。
所以,对于句子
"我星期五早上去睡觉,然后到达那件事,然后心爱的玛丽"
我的正则表达式应匹配字符串"心爱的"。
我尝试过以下代码:
var str = "I went on Friday morning to bed, then to arrive for that
thing and then to beloved Mary";
var r = /to\b(.*)Mary/g
var match = r.exec(str);
console.log(match);
我正在使用全局标志,因为我希望将所有出现的单词"匹配到"。我期待它返回一个字符串数组,其中一个是字符串"心爱的"但我得到的输出是:
["睡觉,然后到达那个东西,然后心爱的玛丽","床,然后到达那个东西,然后心爱的"]
Jsbin在这里:
http://jsbin.com/puyijo/edit?js,console
有什么建议吗?
编辑:" Mary"不一定在字符串的最后。答案 0 :(得分:2)
由于您正在寻找to
的 last ,您可以贪婪地使用to
.*
的任何其他实例:
/.*to\b(.*)Mary/
根据您所描述的要求,/g
不是必需的,因为只有一个“最后一次出现to
”
答案 1 :(得分:0)
你需要在实际的to-Mary序列之前匹配一些东西:
var r = /.+to(.+)Mary/
您也不使用组标记。
然后您的匹配组是第一组:match[1]
。
请注意,如果您可能希望修剪结果,或在正则表达式中添加组外部的其他字符,例如\s,;\.
如果您只想要中间的单词,则不会捕获这些内容。
干杯。
答案 2 :(得分:0)
默认情况下,正则表达式解析器是贪婪的,因此它将首先尝试从第一次出现的to
开始。
您需要使用.*
:
/.*to\b *(.*?) *\bMary/g
答案 3 :(得分:0)
尝试此模式/(to)(?!.*\1)(.*)Mary/g
'(to)(?!.*\1)'
匹配上一个to
(.*)
找到to
和Mary
var str = "I went on Friday morning to bed, then to arrive for that thing and then to beloved Mary";
var r = /(to)(?!.*\1)(.*)Mary/g;
var match = r.exec(str);
console.log(match[2]);