正则表达式:在前瞻之前捕获第一次出现

前端之家收集整理的这篇文章主要介绍了正则表达式:在前瞻之前捕获第一次出现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在特定单词之前捕获网址.唯一的麻烦是这个词也可能是域的一部分.

示例:(我试图在晚餐前捕获所有东西)

https://breakfast.example.com/lunch/dinner/

https://breakfast.example.brunch.com:8080/lunch/dinner

http://dinnerdemo.example.com/dinner/

我可以使用:

^(.*://.*/)(?=dinner/?)

我遇到的麻烦是前瞻性似乎不够懒惰
所以以下是失败的:

https://breakfast.example.com/lunch/dinner/login.html?returnURL=https://breakfast.example.com/lunch/dinner/

因为它捕获:

https://breakfast.example.com/lunch/dinner/login.html?returnURL=https://breakfast.example.com/lunch/

我都不明白为什么以及如何修复我的正则表达式.
也许我走错了路,但我怎么能抓住我的所有例子呢?

解决方法

你可以使用一些懒惰:

^(.*?:\/\/).*?/(?=dinner/?)

Live demo

通过在正则表达式的中间使用.*,你可以吃掉所有内容,直到找到匹配的最后一个冒号.

顺便说一句,在正则表达式的中间,是非常糟糕的做法.它可能会导致长串中可怕的回溯性能下降. .*?更好,因为它不情愿而不是贪婪.

猜你在找的正则表达式相关文章