Javascript 正则表达式模式匹配等于0';s和1';s

Javascript 正则表达式模式匹配等于0';s和1';s,javascript,regex,Javascript,Regex,我试图匹配长度小于5的所有字符串,其中0和1的数量相等,只包含0和1 我无法找出与之匹配的模式。 这就是我到现在为止所说的 /01 | 10 | 1100 | 1010 | 1001 | 0011 | 0101 | 0110/ 任何帮助都将不胜感激我不知道 但以下是不使用正则表达式的方法: var arrayOfStrings = ["11111", "22222", "12345", "00000", "111111", "11002", "10222"]; for(var i=0; i<

我试图匹配长度小于5的所有字符串,其中0和1的数量相等,只包含0和1

我无法找出与之匹配的模式。 这就是我到现在为止所说的

/01 | 10 | 1100 | 1010 | 1001 | 0011 | 0101 | 0110/

任何帮助都将不胜感激

我不知道

但以下是不使用正则表达式的方法:

var arrayOfStrings = ["11111", "22222", "12345", "00000", "111111", "11002", "10222"];
for(var i=0; i<arrayOfStrings.length; i++)
{
    if(arrayOfStrings[i].length <= 5 && arrayOfStrings[i].split('1').length > 1 && arrayOfStrings[i].split('1').length == arrayOfStrings[i].split('0').length)
    {
        // Only prints "11002", "10222"
        console.log(arrayOfStrings[i]);
    }
}
var arrayOfStrings=[“11111”、“22222”、“12345”、“00000”、“111111”、“11002”、“10222”];
对于(var i=0;i您想要这个吗

const check = (s) => {
    const length = s.length;
    if(length % 2 || length > 4) return false;

    const count0 = s.match(/[0]/g).length || 0;
    const count1 = s.match(/[1]/g).length || 0;
    return count0 == count1;
}

您已经在正则表达式中涵盖了所有可能的替代项,您可以将其包装在字符串开头和结尾的锚中:

const strings=['01','011','101','1100','100101','1000','0111','1010'];

console.log(strings.map(s=>/^(01 | 10 | 1100 | 1010 | 1001 | 0011 | 0101 | 0110)$/.test(s));
我能想到的最好的

/^1100|0011|10(10|01)?|01(01|10)?$/
……或者

/^0(011|1(01|10)?)|1(100|0(10|01)?)$/

我只想指出,在两个任意限制之间匹配给定数量的相等“0”和“1”的问题本身就是一个非常有趣的解决方案。这在JavaScript正则表达式中是不可能的(至少据我所知不是这样),因为不支持嵌套引用。但是,这里有一个方法适用于大多数其他风格:

^(?:(?=(?=\2?+1*0)(\1?+0*1))(?=(\2?+1*0))){1,10}+(?=\1(?!0*1))\2[1]*$

{1,10}
定义了“0”和“1”的数量限制,因此对于原始问题,这将是
{1,2}


这是通过同时累加包含下一次出现的“0”和“1”的组,然后检查之后是否存在新出现的组来实现的。

唯一的问题是,匹配的第一个备选方案获胜,而其他备选方案未被尝试。将较长的备选方案放在较短的备选方案之前。但我正在尝试找到一种模式,它们是只是可能性,我不太确定如何将这些转换为模式唯一的排列是模式的对立面我只使用0和1。我需要一个正则表达式匹配。这是必要的,但它可能会变长,如果我没有找到模式,它会更好。Hi@DipeshDesai,我添加了一个pathtern解决方案也是。这是一个小小的改进…
^(?:(?=(\1?+1*01*($))(?=(\3?+0*10*($)){1,10}?\2\4.
--但是更短更简单。请注意,这些在Perl中也不起作用,因为它显然应用了与JavaScript相同的规则-.NET正则表达式没有任意长度限制,使用可变长度查找。
^(?=(?>(?'z'0)| 1)*$)(?>(?'-z'1)| 0)*$(?(z)。
()-.NET正则表达式没有任意长度限制,使用平衡组。