我正在尝试编写一个正则表达式来接受任何二进制字符串,唯一的标准是0的数量不是3的因数([数量为0]%3!= 0)。如何实现这一目标?
答案 0 :(得分:0)
从我能够查找的内容来看,仅使用正则表达式是不可能的。您可能需要获取0的数量并在其他代码中自行解析。对于每场比赛,请检查result % 3 != 0
答案 1 :(得分:0)
您可以使用.match()
来实现此目的。 .match()
返回与正则表达式匹配的所有匹配项的数组。在返回的数组.length
上使用modulo将告诉您0的数量是否可以被3整除。
var someString = '012345167891abcd1efghi1jklmn';
var numOfOnes = someString.match(/(1)/g)
// numOfOnes = ["1", "1", "1", "1", "1"]
numOfOnes.length % 3 // will return 2, so it's not a factor of 3
答案 2 :(得分:0)
如果你的正则表达式支持recursive pattern,你可以使用它:
^(1*01*)(?1)?(?:(?1)(?1)(?1))*1*$
如果没有,请将所有(?1)
替换为(1*01*)
<强>解释强>
^ : begining of string
( : start group 1
1*01* : that contains 0 or more 1, one 0 and 0 or more 1
) : end group
At this time, we have one 0
(?1)? : Same pattern as group 1 (ie. 1*01*), optional
we have now one or two 0
(?: : non capture group
(?1)(?1)(?1): pattern 1 repeated 3 times
)* : 0 or more times
we have one or two 0 followed by three 0,
so the number of zeros modulo 3 != 0
1* : 0 or more 1
$ : end of string.