0

これは否定的な先読みと呼ばれていると思います/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の実装を台無しにしています。

4

1 に答える 1

2

あなたは物事をここにあるべきよりも少し複雑にしています。次のようなものを使用できます。

/^[a-zA-Z]{2}-[0-9]{2}$/;

^文字列の先頭と一致し、文字$列の末尾と一致します。

この正規表現では、2 文字の後に 1 つのハイフンと 2 つの数字が続く文字列のみが許可されます。JavaScriptでも同様に[0-9]書き換えることができます。\d


/([a-zA-Z]{2}(?!\b))((-){1})([0-9]{2}(?!\B))/;

これは、期待どおりには機能しません。(?!\b)2 文字の直後に単語境界が発生するのを防ぎます。これにより、有効な文字列が失敗します。

((-){1})グループ化するものはほとんどないため、それらをグループ化したい場合でも、それほど多くの括弧は必要ありません。括弧を使用して、後で使用するものをキャプチャします。{1}も冗長です。の具体的な使用法を 1 つも見たことがありません{1}。が1 より大きい場合{n}に便利です。n

([0-9]{2}(?!\B))繰り返しますが、括弧はあまり役に立ちませんが、ここでは、否定された単語境界を使用しました。これはうまく機能するはずです (同様$ですが、文字列のどこでも)。

このような形式を文字列のどこかに一致させたい場合は、次のように単語境界を使用できます。

/\b[a-zA-Z]{2}-[0-9]{2}\b/;
于 2013-09-24T17:17:44.463 に答える