我正在尝试匹配所有长度小于5的字符串,其中0的数目和1的数目相等,仅包含0和1
我无法找出匹配的模式。 这是我到目前为止提出的内容
/01|10|1100|1010|1001|0011|0101|0110/
任何帮助将不胜感激
答案 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]*$
{1,10}
定义了'0'和'1'数量的限制,因此对于最初的问题,它就是{1,2}
。
这是通过同时累加包含下一个出现的“ 0”和“ 1”的组,然后检查之后是否不存在新的出现来进行的。