我正在尝试编写一个正则表达式来接受任何二进制字符串,唯一的标准是 0 的数量不是 3 的因数([0 的数量] % 3 != 0)。如何才能实现这一目标?
您可以使用
.match()
来实现此目的。 .match()
返回与正则表达式匹配的所有匹配项的数组。对返回数组的 .length
使用模将告诉您 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
如果你的正则表达式风格支持递归模式,你可以使用这个:
^(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.
^(([^0]*0){3})*[^0]*$
检查是否存在 3 个零的倍数,您可以在 (0[^0]*){1,2}
之前放置 $
,或者将其包含在负向前看中。
据我所知,仅使用正则表达式是不可能的。您可能需要获取 0 的数量并在其他代码中自行解析。对于每场比赛,检查是否
result % 3 != 0