これは否定的な先読みと呼ばれていると思います/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} オカレンス マーカーで十分だと思いましたが、 3 つtrue
以上の文字/数字がある場合でも返されます ({n} マーカーの意図と同様)。\b
したがって、文字に対して別の単語が見つかり、数字に対して単語以外が見つかった場合に false を返すように、否定先読みを試みまし\B
た。しかし、それもうまくいきませんでした。
否定的な先読みと\b
&を削除し、元のもの\B
に固執する場合:
var regex = /[a-zA-Z]{2}(-){1}[0-9]{2}/;
その場合、値の半分は有効ですが、余分な文字/数字を含むものも有効と見なされます。
簡単に言えば、何かが正確 X
に発生していることを確認し、余分な場合は false を返すにはどうすればよいですか? 多分私はNLAの実装を台無しにしています。