![](/img/trans.png)
[英]Find last occurrence of comma in a string using regex in javascript
[英]Javascript: Regex to find string between last occurrence of a string and another string
我想查找句子中最后一个出现的单词“ to”和另一个出现的单词“ Mary”之间的文本。
所以,对于这句话
“我星期五早上去睡觉,然后去做那件事,然后爱上了玛丽”
我的正则表达式应匹配字符串“ beloved”。
我尝试了以下代码:
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”的所有出现。 我期望它返回一个字符串数组,其中一个是字符串“ beloved”,但是我得到的输出是:
[“上床,然后为了那个东西而到心爱的玛丽”,“上床,然后为了那个东西而到心爱的人”]
Jsbin在这里:
http://jsbin.com/puyijo/edit?js,控制台
有什么建议么?
编辑:“玛丽”一词不一定在字符串的尽头。
由于您正在寻找to
的最后一次出现,因此您可以使用.*
贪婪地使用to
任何其他实例:
/.*to\b(.*)Mary/
根据您所描述的要求, /g
不是必需的,因为只能有一个“最后一次出现to
”
您需要在实际的to-Mary序列之前进行匹配:
var r = /.+to(.+)Mary/
您也不要使用组标志。
那么您的匹配组是第一组: match[1]
。
请注意,如果您想修剪结果,或在正则表达式的组外添加其他字符,例如\\s,;\\.
,; \\s,;\\.
如果您只想在两者之间加上一个或多个单词,则不捕获它们。
干杯。
正则表达式解析器默认情况下是贪婪的,因此它将首先尝试从首次出现to
。
您需要使用.*
丢弃所有先前的字符:
/.*to\b *(.*?) *\bMary/g
试试这个模式/(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]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.