正则表达式:在起始分隔符和可选的结束分隔符之间捕获

时间:2016-07-03 16:57:05

标签: javascript regex

使用以下字符串:

foo/:something/bar/:somethingelse

如果考虑第二种情况下的可选something结束分隔符,如何捕获somethingelse/

仅使用(?<=:)(.*?)(?=\/)会返回something,这是有道理的。

所以我尝试了(?<=:)(.*?)(?=\/|$),但它也没有返回somethingelse

根据Regex101,(?=\/|$)表示/或字符串结尾,因此原则上应该捕获somethingelse

https://regex101.com/r/gU4uR9/2

我错过了什么?

1 个答案:

答案 0 :(得分:3)

正如其他人已经指出的那样,JavaScript正则表达式引擎有些瘫痪(并且不支持lookbehinds)。
通常的解决方法是匹配之前的事情(此消费字符)和捕获之后组中所需的子字符串:

\/:([^/]+)

a demo on regex101.com

JS代码中,这将是:

var str = "foo/:something/bar/:somethingelse";
var re = /\/:([^/]+)/g;
var matches = str.match(re);

感谢@Wiktor澄清命名法。