Javascript正则表达式否定预测(验证确切{X}发生次数而不是更多)
我认为它被称为负面预测/x(?!y)/
,但我不确定,因为我今天刚开始做正则表达式的东西。我想确认以下内容:Javascript正则表达式否定预测(验证确切{X}发生次数而不是更多)
// 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个字母后跟一个连字符,然后是两个数字(0-9)。我想验证没有3个以上的字母,也没有3个以上的数字。
我认为每个{n}出现的标记都足够了,但是当有3个以上的字母/数字时(如{n}标记的意图),它仍然会返回true
。因此,如果发现字母为\b
,并且数字为非字\B
,则我尝试使用否定前瞻返回false。但是那也行不通。
如果我删除负面查找aheads和\b
& \B
,只是坚持原:
var regex = /[a-zA-Z]{2}(-){1}[0-9]{2}/;
随后这些值的一半是有效的,但那些与额外字符/数字也被认为是有效的。
长话短说:我如何保证有正是X
量发生什么,当有额外返回false?也许我只是搞乱了NLA的实现。
你正在做的事情有点复杂得多,他们应该在这里。您可以使用这样的事情:
/^[a-zA-Z]{2}-[0-9]{2}$/;
^
将匹配字符串的开头和$
将匹配字符串的结尾。
此正则表达式将允许含有2个字母,接着是一个连字符和接着用2个位数只有字符串。您也可以在JavaScript中将[0-9]
重写为\d
。
/([a-zA-Z]{2}(?!\b))((-){1})([0-9]{2}(?!\B))/;
这并不完全工作,正如您所料。 (?!\b)
可防止2个字母后出现字边界,这将使您的有效字符串失效。
((-){1})
你并不需要那么多的括号,即使你想组的,因为几乎没有什么组。使用圆括号来捕捉稍后使用的内容。 {1}
也是多余的。我从来没有见过{1}
的单一具体使用。当n
大于1时,{n}
是有用的。
([0-9]{2}(?!\B))
同样,括号不是很有用,但是在这里,您使用了一个否定字边界,它应该很好地工作(类似于$
,但字符串中的任何位置)。
如果你想在一个字符串之间是否匹配这样的格式,那么你可以使用单词边界如下:
/\b[a-zA-Z]{2}-[0-9]{2}\b/;
@plalx整齐,我从来没有见过'[AZ]'之前一直使用'我'的标志。 – Mathletics
完美!对不起这样一个荒谬的问题,这是我第一次尝试regexing,我只是通过阅读[MDN]上的文档来获得(https://developer.mozilla.org/en-US/docs/Web/的JavaScript /指南/ Regular_Expressions)。直到现在,我还没有真正理解'^'和'$'的含义。尽管工作完美,谢谢:) –
@plalx这将允许更多的字符比[A-ZA-Z],因为它也将匹配字符:[\]^_'(6个额外的字符) – Jerry