使用以下字符串:
foo/:something/bar/:somethingelse
如果考虑第二种情况下的可选something
结束分隔符,如何捕获somethingelse
和/
?
仅使用(?<=:)(.*?)(?=\/)
会返回something
,这是有道理的。
所以我尝试了(?<=:)(.*?)(?=\/|$)
,但它也没有返回somethingelse
。
根据Regex101,(?=\/|$)
表示/
或字符串结尾,因此原则上应该捕获somethingelse
。
https://regex101.com/r/gU4uR9/2
我错过了什么?
答案 0 :(得分:3)
正如其他人已经指出的那样,JavaScript正则表达式引擎有些瘫痪(并且不支持lookbehinds)。
通常的解决方法是匹配之前的事情(此消费字符)和捕获之后组中所需的子字符串:
\/:([^/]+)
在JS
代码中,这将是:
var str = "foo/:something/bar/:somethingelse";
var re = /\/:([^/]+)/g;
var matches = str.match(re);
感谢@Wiktor澄清命名法。