正则表达式模式匹配等于0和1

时间:2018-09-19 23:19:30

标签: javascript regex

我正在尝试匹配所有长度小于5的字符串,其中0的数目和1的数目相等,仅包含0和1

我无法找出匹配的模式。 这是我到目前为止提出的内容

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

任何帮助将不胜感激

5 个答案:

答案 0 :(得分:2)

您已经在正则表达式中介绍了所有可能的替代方法,您可以将其包装在锚点中,以开始和结束字符串:

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)));

那是蛮力方法。我认为使用模式可以做到的最好是:

const strings = ['01', '011', '101', '1100', '100101', '', '1000', '0111', '1010'];
console.log(strings.map(s => /^((01|10){1,2}|0011|1100)$/.test(s)));

答案 1 :(得分:0)

我不知道。

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

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]);
    }
}

查找以下字符串:  长度<= 5  至少有1个“ 1”  数量等于1和0。

答案 2 :(得分:0)

你想要这个吗?

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;
}

答案 3 :(得分:0)

最好我想出...

/^1100|0011|10(10|01)?|01(01|10)?$/

...或替代地...

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

答案 4 :(得分:0)

仅需指出,在两个任意限制之间匹配给定数量的相等的'0'和'1'的问题很容易解决。至少在JavaScript正则表达式中,这是不可能的(至少,据我所知),因为不支持嵌套引用。但是,这是一种适用于大多数其他口味的方法:

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

Check it out on regex101

{1,10}定义了'0'和'1'数量的限制,因此对于最初的问题,它就是{1,2}

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