Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在javascript正则表达式中的前瞻表达式模式中使用捕获组?_Javascript_Regex - Fatal编程技术网

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

是否可以在javascript正则表达式中的前瞻表达式模式中使用捕获组?,javascript,regex,Javascript,Regex,我有以下正则表达式: /(1+(?=0|$))|(0+(?=1|$))/ 我在仅由0和1个字符组成的字符串上使用它,将字符串分成0和1两组。在这里,我的正则表达式匹配1的组后跟0或第1行的结尾+?=0 |$,或0的组后跟1或第0行的结尾+?=1 |$ 我想知道我是否可以使用类似于/[01]+?=[^$1]|$/的东西来匹配捕获组[01]中的0或1,然后不是捕获组[^$1]中的内容,从而得到相同的结果。这种语法显然不起作用,我无法确定这样的事情是否可行。反向引用需要在字符集之外。字符集不接受这样

我有以下正则表达式:

/(1+(?=0|$))|(0+(?=1|$))/
我在仅由0和1个字符组成的字符串上使用它,将字符串分成0和1两组。在这里,我的正则表达式匹配1的组后跟0或第1行的结尾+?=0 |$,或0的组后跟1或第0行的结尾+?=1 |$


我想知道我是否可以使用类似于/[01]+?=[^$1]|$/的东西来匹配捕获组[01]中的0或1,然后不是捕获组[^$1]中的内容,从而得到相同的结果。这种语法显然不起作用,我无法确定这样的事情是否可行。

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

在模式中,您还需要\1,而不是$1,而且我认为不需要前瞻:

console.log “001100011101”。匹配/[01]?:\1*/g
; 反向引用需要在字符集之外。字符集不接受这样的反向引用

在模式中,您还需要\1,而不是$1,而且我认为不需要前瞻:

console.log “001100011101”。匹配/[01]?:\1*/g
;<有三件事需要考虑:

.split还将输出捕获的子字符串 因此,您需要一个String.match,正则表达式需要一个全局标志 您,您需要实际匹配一个字符,并使用前瞻性限制它: 你可以用

控制台。日志'001100011101'。匹配/[01]+??=\1.|$/g //进一步简化为
控制台。日志'0110011101'。匹配/ [ 01 ] \ 1 */g < P>有三件事要考虑:

.split还将输出捕获的子字符串 因此,您需要一个String.match,正则表达式需要一个全局标志 您,您需要实际匹配一个字符,并使用前瞻性限制它: 你可以用

控制台。日志'001100011101'。匹配/[01]+??=\1.|$/g //进一步简化为
console.log'001100011101'.match/[01]\1*/g如果字符串仅由0和1组成,并且希望匹配0和1的序列,则不需要任何组

您可以匹配1个或多个零,或者使用替换来匹配1个或多个零

0+|1+

控制台。日志“001100011101”。匹配/0+| 1+/g 如果字符串仅由0和1组成,并且希望匹配0和1的序列,则不需要任何组

您可以匹配1个或多个零,或者使用替换来匹配1个或多个零

0+|1+

控制台。日志“001100011101”。匹配/0+| 1+/g;谢谢你的回答,这并没有回答我的确切问题,但你的逻辑是正确的,这就是我将使用的。谢谢你的回答,这并没有回答我的确切问题,但你的逻辑是正确的,这就是我将使用的。谢谢你的详细回答。关于拆分的注释也很有用@statox我忘了删除。filter,因为使用match,您将不会在输出中获得任何空字符串。是的,我在测试时发现了这一点,感谢您指出:@statox我希望您理解非捕获组在?:\1*中是无用的?只需使用/[01]\1*/g,它比较短,也不太麻烦。感谢您提供详细的答案。关于拆分的注释也很有用@statox我忘了删除。filter,因为使用match,您将不会在输出中获得任何空字符串。是的,我在测试时发现了这一点,感谢您指出:@statox我希望您理解非捕获组在?:\1*中是无用的?只需使用/[01]\1*/g,它就更短,也更省力。