就像我在您的问题下方的评论中一样,您可以使用以下正则表达式:
查看正则表达式在这里使用
^(?!9+[98]$|d1{2})d{3,6}$
这个怎么运作:
^
在行首声明位置(?!9+[98]$|d1{2})
否定前瞻,确保不会继续执行以下任一选项d{3,6}
匹配3到6位数字$
在行尾断言位置
由于负先行跟随线锚的开始,我们还要确保在该位置先行启动,这就是为什么
d1{2}比赛
011,
111,
211,…,
911而不是
1211或他人。
代码如下:
s = ['999','998','911','611','9999','9998','8112','5112','99999','99998','71122','41122','999999','999998','611222','311222','123','6211','99989','121212']r = /^(?!9+[98]$|d1{2})d{3,6}$/for (x of s) { console.log(x.match(r) ? x + ': true' : x + ': false')}
-
编辑OP提到了这一点,
999并将其
998放置在字符串中的任何位置均应使其无效:
查看正则表达式在这里使用
^(?!d*9{2}[98]|d1{2})d{3,6}$
除负先行中的第一个选项外,与上述相同的正则表达式。现在是
d*9{2}[98],匹配
999或
998字符串中的任意位置(以任意数字开头)。
s = ['999','998','911','611','9999','9998','8112','5112','99999','99998','71122','41122','999999','999998','611222','311222','123','6211','99989','121212']r = /^(?!d*9{2}[98]|d1{2})d{3,6}$/for (x of s) { console.log(x.match(r) ? x + ': true' : x + ': false')}
-
编辑#2OP指出的格式
0N11应无效(而不仅仅是
N11):
查看正则表达式在这里使用
^(?!d*9{2}[98]|[01]?d1{2})d{3,6}$
与上述相同的正则表达式,除了负前瞻中的第二个选项。这是现在
[01]?d1{2},匹配
0或
1可选的,其次是任何数字,然后
11(所以
011,
111,
211,…,
,
911,
0011,,
0111,…, ,,, ,…,
)。
0211``0311``0911``1011``1111``1211``1911
s = ['999','998','911','611','9999','9998','8112','5112','99999','99998','71122','41122','999999','999998','611222','311222','123','6211','99989','121212']r = /^(?!d*9{2}[98]|[01]?d1{2})d{3,6}$/for (x of s) { console.log(x.match(r) ? x + ': true' : x + ': false')}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)