javascript - 正则表达式:在起始定界符和可选的结束定界符之间捕获

标签 javascript regex

使用以下字符串:

foo/:something/bar/:somethingelse

如何捕获 somethingsomethingelse考虑可选的 /第二种情况的结束分隔符?

使用 (?<=:)(.*?)(?=\/)只返回 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 对术语的澄清。

关于javascript - 正则表达式:在起始定界符和可选的结束定界符之间捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172232/

相关文章:

javascript - 如何从后端获取 Angular 数据并使用 Node.js 向前端发送数据?

javascript - 语句之间如何使用逗号运算符?

javascript - 找出日期中的月份的周数

c# - 为什么asp.net core的URL重写中间件与以下正则表达式不匹配?

regex - 对数据框的列名执行多次搜索和替换

javascript - 我如何在用户滚动时动态的固定 div 上设置上限和下限?

Java:正则表达式解析字符串的 "edges"

java - 将 Perl 正则表达式转换为 POSIX 正则表达式

MySQL 帮助 REGEXP 尝试将邮政编码从 9 位数缩短为 5 位数

javascript - 使用 Angularjs 创建 Bootstrap CSS 类的下拉列表