我认为这被称为负前瞻/x(?!y)/
,但我不确定,因为我今天才开始做正则表达式的东西。我正在尝试验证以下内容:
// Matches aa-00 through ZZ-99
var regex = /([a-zA-Z]{2}(?!\b))((-){1})([0-9]{2}(?!\B))/;
var result = regex.test("EV-05"); // Should pass
Console.log("EV-05: " + result + "\n");
result = regex.test("ev-09"); // Should pass
Console.log("ev-09: " + result + "\n");
result = regex.test("eV-11"); // Should pass
Console.log("eV-11: " + result + "\n");
result = regex.test("Ev-30"); // Should pass
Console.log("Ev-30: " + result + "\n");
result = regex.test("ev03"); // Should fail
Console.log("ev03: " + result + "\n");
result = regex.test("e-17"); // Should fail
Console.log("e-17: " + result + "\n");
result = regex.test("ev-5"); // Should fail
Console.log("ev-5: " + result + "\n");
result = regex.test("evv-36"); // Should fail
Console.log("evv-36: " + result + "\n");
result = regex.test("ev-019"); // Should fail
Console.log("ev-019: " + result + "\n");
result = regex.test("ev--05"); // Should fail
Console.log("ev--05: " + result + "\n");
这就是我想要的:
LETTER#LETTER#HYPHEN#DIGIT#DIGIT
(老实说,不知道如何以可读的方式描述它)。
我不想允许为这 5 个参数中的任何一个输入额外的值。它必须正好是 2 个字母,后跟一个连字符,后跟 2 个数字 (0-9)。我想验证没有 3 个以上的字母,也没有 3 个以上的数字。
我认为每个的 {n} 出现标记就足够了,但是true
当有 3 个以上的字母/数字时它仍然会返回(这也是 {n} 标记的意图)。\b
因此,如果为字母找到另一个单词,而为数字找到非单词,我尝试了否定前瞻返回 false \B
。但这也没有用。
如果我删除负面的前瞻和\b
&\B
并坚持原来的:
var regex = /[a-zA-Z]{2}(-){1}[0-9]{2}/;
然后一半的值是有效的,但带有额外字符/数字的值也被认为是有效的。
长话短说:我如何确保发生的事件数量准确 X
,并在有额外事件时返回 false?也许我只是搞砸了 NLA 的实施。