如何使懒惰的正则表达式搜索优先于一个匹配而不是另一个匹配?

时间:2018-05-07 21:50:43

标签: regex regex-greedy

给定"happy days"之类的字符串,我希望能够将“days”作为最高优先级进行匹配,如果我得到它就停止匹配。如果我不喜欢,我想要“快乐”和之后发生的任何事情。因此,例如"happy dogs"将返回匹配“快乐的狗”,而"happy days"将返回“天”。我想过尝试像(days|happy\s*\w*)?这样的东西。这个想法是'天'被放在第一位并且会很快匹配并退出(因为我们处于懒惰模式)。但相反,它与完整的“快乐时光”相匹配。我该如何实现此功能?

2 个答案:

答案 0 :(得分:1)

在这种特殊情况下,您必须首先使用贪婪点消耗输入字符串,然后使引擎回溯:

(2015/12/27,12AM,32.0)
(2015/12/27,12PM,34.0)
(2015/12/28,10AM,26.1)
(2015/12/28,10PM,28.0)
(2015/12/28,11AM,27.0)
(2015/12/28,11PM,28.9)
(2015/12/28,12AM,25.0)
(2015/12/28,12PM,26.100000000000005)
(2015/12/29,10AM,22.45)
(2015/12/29,10PM,26.1)
(2015/12/29,11AM,24.1)
(2015/12/29,11PM,25.0)
(2015/12/29,12AM,28.9)

Live demo

答案 1 :(得分:0)

您也可以使用否定前瞻:

console.log("happy days".match(/days|happy(?!.*days.*).*/)[0])
console.log("happy dogs".match(/days|happy(?!.*days.*).*/)[0])