使用以下字符串:
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澄清术语。