Javascript:Regex,用于在字符串的最后一次出现和另一个字符串之间查找字符串

Javascript:Regex,用于在字符串的最后一次出现和另一个字符串之间查找字符串,javascript,regex,Javascript,Regex,我想找出出现在句子中最后一个“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\b(.*)Mary/g var match = r.exec

我想找出出现在句子中最后一个“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\b(.*)Mary/g
var match = r.exec(str);
console.log(match);
我使用全局标志,因为我想匹配所有出现的单词“to”。我希望它返回一个字符串数组,其中一个是字符串“心爱的”,但我得到的输出是:

[“睡觉,然后去做那件事,然后去至爱的玛丽”,“睡觉,然后去做那件事,然后去至爱的人”]

请点击这里:

有什么建议吗


编辑:单词“玛丽”不一定在字符串的末尾

您需要在实际到玛丽序列之前匹配一些内容:

var r = /.+to(.+)Mary/
您也不使用组标志

那么您的匹配组就是第一组:
match[1]

请注意,如果您可能希望修剪结果,或者在正则表达式中的组外添加一些其他字符,例如
\s,;\不捕获这些内容


干杯。

您需要在实际到玛丽序列之前匹配一些内容:

var r = /.+to(.+)Mary/
您也不使用组标志

那么您的匹配组就是第一组:
match[1]

请注意,如果您可能希望修剪结果,或者在正则表达式中的组外添加一些其他字符,例如
\s,;\不捕获这些内容


干杯。

正则表达式解析器在默认情况下是贪婪的,因此它将首先尝试从第一次出现的
开始

您需要使用
*
放弃前面的所有字符:

/.*to\b *(.*?) *\bMary/g
 /.*to\b(.*)Mary/

默认情况下,正则表达式解析器是贪婪的,因此它将首先尝试从第一次出现的

您需要使用
*
放弃前面的所有字符:

/.*to\b *(.*?) *\bMary/g
 /.*to\b(.*)Mary/

由于您正在查找最后一次出现的
to
,因此您可以贪婪地使用
*
来使用
to
的任何其他实例:

/.*to\b *(.*?) *\bMary/g
 /.*to\b(.*)Mary/

根据您描述的要求,
/g
是不必要的,因为只有一个“最后一次出现的
to

因为您正在查找最后一次出现的
to
,您可以贪婪地使用
to
的任何其他实例:

/.*to\b *(.*?) *\bMary/g
 /.*to\b(.*)Mary/
对于您描述的要求,
/g
是不必要的,因为只有一个“最后出现的
to

尝试此模式
/(to)(?!*\1)(*)Mary/g

  • ”(to)(?!.*\1)
    它与最后一个
    to
  • (.*)
    是查找
    玛丽之间的文本
  • var str=“我星期五早上去睡觉,然后去拿东西,然后去心爱的玛丽”;
    变量r=/(to)(?!.*\1)(.*)玛丽/g;
    var match=r.exec(str);
    console.log(匹配[2])
    尝试此模式
    /(to)(?!.*\1)(.*)玛丽/g

  • ”(to)(?!.*\1)
    它与最后一个
    to
  • (.*)
    是查找
    玛丽之间的文本
  • var str=“我星期五早上去睡觉,然后去拿东西,然后去心爱的玛丽”;
    变量r=/(to)(?!.*\1)(.*)玛丽/g;
    var match=r.exec(str);
    
    console.log(匹配[2])是否
    Mary
    在字符串末尾?不一定-问题编辑是
    Mary
    在字符串末尾?不一定-问题编辑