javascript - 正则表达式 - 如何反转为 NOT

标签 javascript regex

我正在尝试编写一个正则表达式,我可以将一些非规则链接在一起。我需要验证一个数字字符串以检查它是否不匹配一些规则。

我需要它:

  1. 不以 3 个零开头
  2. 不以 4 个零结尾
  3. 数字不能全部相同

这是我到目前为止正在尝试的:

var re = new RegExp(/^(.)\1{8}$|^000|0000$/);

re.test("111111111"); // true; all same digit
re.test("000112222"); // true; starts with zeroes
re.test("111110000"); // true; ends in zeroes
re.test("123456789"); // false
re.test("111223344"); // false

这适用于前三种情况,产生 TRUE,除非满足 3 个规则,否则如何反转测试使其为 false?

(我知道我可以用在JS中翻转它!,我正在寻找正则表达式解决方案)

最佳答案

将所有规则放在一起,您可以使用此正则表达式:

/^(?!0{3})(?!.*0{4}$)(\d)(?!\1*$)\d*$/gm

RegEx Demo

正则表达式分解:

^           # start
(?!0{3})    # negative lookahead to assert failure when we have 3 0s at start
(?!.*0{4}$) # negative lookahead to assert failure when we have 4 0s at end
(\d)        # match a digit and capture in group #1
(?!\1*$)    # negative lookahead to assert we don't have same digit until end 
\d*         # match zero or more digits
$           # end

关于javascript - 正则表达式 - 如何反转为 NOT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801351/

相关文章:

Javascript:从 HTML 表单获取上传文件的详细信息

php - 使用 php 正则表达式拆分字符串

javascript - Electron中如何让鼠标穿过窗口

php - 如何记录网站的控制流程

c# - 简单正则表达式的困难(匹配前缀/后缀)

java - 使用java中的正则表达式从无效/部分xml中提取值

javascript - 只有单点的十进制数的正则表达式使用 replace() 方法

regex - 从选定的 Unicode 希伯来语文本中删除希伯来语元音 (nikkud)

javascript - IE11 和基于 Javascript 的模态表单表现得很有趣

javascript - 如何在 Angular JS 中为 {{expression}} 文本着色并将所有文本保留在一行中?