使用以下字符串:

foo/:something/bar/:somethingelse

考虑到第二种情况下可选的something结束定界符,如何捕获somethingelse/

使用(?<=:)(.*?)(?=\/)仅返回something,这很有意义。

因此,我尝试了(?<=:)(.*?)(?=\/|$),但它也不返回somethingelse

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

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

我想念什么?

最佳答案

正如其他人已经指出的那样,JavaScript正则表达式引擎有些残缺(并且不支持lookbehinds)。
通常的解决方法是匹配之前的内容(这会消耗字符),然后捕获后面的组中所需的子字符串:

\/:([^/]+)

参见a demo on regex101.com

JS代码中,这将是:
var str = "foo/:something/bar/:somethingelse";
var re = /\/:([^/]+)/g;
var matches = str.match(re);

感谢@Wiktor澄清术语。

08-19 17:06