使用以下字符串:
foo/:something/bar/:somethingelse
如何捕获 something
和 somethingelse
考虑可选的 /
第二种情况的结束分隔符?
使用 (?<=:)(.*?)(?=\/)
只返回 something
,这是有道理的。
所以我试过了 (?<=:)(.*?)(?=\/|$)
但它不返回 somethingelse
要么。
根据 Regex101 这 (?=\/|$)
表示 /
或字符串的末尾,所以原则上 somethingelse
应该被捕获。
https://regex101.com/r/gU4uR9/2
我错过了什么?
最佳答案
正如其他人已经指出的那样,JavaScript 正则表达式引擎有些缺陷(并且不支持 lookbehinds)。
通常的解决方法是匹配之前的东西(这消耗个字符)然后捕获一组所需的子字符串:
\/:([^/]+)
在 JS
代码中,这将是:
var str = "foo/:something/bar/:somethingelse";
var re = /\/:([^/]+)/g;
var matches = str.match(re);
感谢@Wiktor 对术语的澄清。
关于javascript - 正则表达式:在起始定界符和可选的结束定界符之间捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172232/