当前位置: 首页 > 知识库问答 >
问题:

是否可以在javascript正则表达式中给定的模式中使用捕获组?

吕森
2023-03-14

我有以下正则表达式:

/(1+(?=0|$))|(0+(?=1|$))/

我在只由01字符组成的字符串上使用它,将字符串分成0s和1s组。在这里,我的正则表达式匹配1s组,然后是0或行尾1(?=0 |$)0s组,然后是1或行尾0(?=1 124$)

> '001100011101'.split(/(1+(?=0|$))|(0+(?=1|$))/).filter(c=>!!c)
[ '00', '11', '000', '111', '0', '1' ]

我想知道我是否可以使用类似于/([01])(?=[^$1]|$)/的方法来匹配捕获组(([01]))中的0或1)中的([01])然后不是捕获组中的[^$1]。这种语法显然不起作用,我不知道这样的事情是否可行。


共有3个答案

浦毅
2023-03-14

那么有三件事需要考虑:

  • .拆分()也会输出捕获的子字符串
  • 因此,您将需要一个String.match(),而正则表达式将需要一个全局标志
  • 您不能在否定字符类中使用反向引用,您需要实际匹配一个char并使用前瞻来限制它:

你可以用

console.log('001100011101'.match(/([01])+?(?=(?!\1).|$)/g))
// Further simplified to
console.log('001100011101'.match(/([01])\1*/g))
谈旺
2023-03-14

如果您的字符串仅由0和1组成,并且您想匹配0和1的序列,则不需要任何组。

您可以匹配1个或多个零,或者使用交替匹配1个或多个1。

0+|1+

正则表达式演示

console.log('001100011101'.match(/0+|1+/g));
孔建柏
2023-03-14

反向引用需要在字符集之外(字符集不接受这样的反向引用)。

在这个模式中,您还需要\1,而不是$1,我认为没有任何前瞻性的必要:

console.log(
  '001100011101'.match(/([01])(?:\1)*/g)
);
 类似资料:
  • 问题内容: 据我所知,JavaScript中没有所谓的捕获组。获得类似功能的替代方法是什么? 问题答案: ECMAScript 2018将命名捕获组引入了JavaScript正则表达式中。 例: 如果您需要支持较旧的浏览器,则可以使用命名捕获组来处理普通(编号)捕获组,而只需要跟踪编号-如果捕获组中的捕获组顺序很麻烦,正则表达式更改。 我能想到的命名捕获组只有两个“结构”优点: 在某些正则表达式中

  • 问题内容: 据我所知,MySQL不支持从正则表达式匹配中检索捕获组的值。我发现了一个服务器端扩展(lib_mysqludf_preg),它将添加此功能,但无法在我的环境中安装此扩展。 因此,我正在寻找一种方法来模拟将正则表达式匹配的一部分捕获为SQL查询中的一列。 我的数据如下所示(并且我无法更改服务器上的数据格式): 我正在寻找每行的最后4位数字。数字始终是值的最后一部分,并且始终由点分隔。以下

  • 问题内容: 我想获取所有具有与某些正则表达式匹配的文本的div / links / ..的xpath计数。例如: 我希望能够致电: 并使其返回2。(当然,这是一个简单的示例,我想使用各种正则表达式) 这可能吗,怎么办? 问题答案: 使用允许您使用javascript 的协议。而javascript具有regexp:

  • 在Python中,如何在非捕获组中捕获组?换句话说,如何重复包含捕获组的非捕获子模式? 例如,捕获导入字符串上的所有包名。例如,字符串: 导入熊猫、操作系统、系统 将返回“pandas”、“os”和“sys”。下面的模式捕获第一个包并到达第二个包: 从这里,我想重复捕获组并匹配以下字符的子模式,即。当我用一个非捕获组包围这个子模式并重复它时: 它不再捕捉里面的群体。

  • 假设我有这个虚拟URL,我需要提取植物及其颜色作为 下面的I have正在按预期捕获我需要的元素,但是当我的URL中的植物少于4株时,它无法捕获任何东西。底部有一个指向regex测试员的链接,其中有示例代码和URL,您可以使用。 如何修改这个正则表达式,使其动态工作,从而在不需要静态URL结构的情况下捕获可用内容。现在,假设我最多只能捕获4株植物(8组) https://regex101.com/

  • 问题内容: 假设我要使用SCAN功能扫描Redis中的集合。是否可以将正则表达式传递给MATCH? 问题答案: 不,是仅支持通配符的模式。