正则表达式中的模运算符

问题描述 投票:0回答:4

我正在尝试编写一个正则表达式来接受任何二进制字符串,唯一的标准是 0 的数量不是 3 的因数([0 的数量] % 3 != 0)。如何才能实现这一目标?

regex modulo regular-language
4个回答
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

0
投票

如果你的正则表达式风格支持递归模式,你可以使用这个:

^(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]*0){3})*[^0]*$
检查是否存在 3 个零的倍数,您可以在
(0[^0]*){1,2}
之前放置
$
,或者将其包含在负向前看中。


-1
投票

据我所知,仅使用正则表达式是不可能的。您可能需要获取 0 的数量并在其他代码中自行解析。对于每场比赛,检查是否

result % 3 != 0

© www.soinside.com 2019 - 2024. All rights reserved.