2

このようなDNF(選言標準形)を検証したいと思いますA*B+A'*C+C*D*E'。この目的のために、私は次のパターンを使用します。

/[A-Z]'?(\*[A-Z]'?)*(\+[A-Z]'?(\*[A-Z]'?)*)+/g

このオンラインツールhttp://www.pagecolumn.com/tool/regtest.htmでjavascripttest()メソッドを使用してこのパターンをテストし ましたが、期待した結果が得られました。

次のコードを使用して、javascriptでパターンをテストしようとしました。

  <script type="text/javascript">
    var dnf="A*3+A*B+CD";
    var pattern= /[A-Z]'?(\*[A-Z]'?)*(\+[A-Z]'?(\*[A-Z]'?)*)+/g;
    var flag = false;
    flag=pattern.test(dnf);
    console.log(flag);
  </script>

問題は、私にはわかりませんが、フラグ(このコード内)が「true」になる理由です。これは「false」である必要があり、でA*3およびCDという用語が発生しdnf="A*3+A*B+CD"ます。

私はこれをオンラインテスターでテストしました、そしてそれは言います:マッチはありません、私が正しいと思うこと。

4

2 に答える 2

1

一致が文字列の先頭で開始するか、文字列の末尾で終了する必要があることを指定していません。したがって、部分文字列が一致する場合、パターンテストはを返しtrueます。A*B+Cこの場合、 (元の文字列のサブ文字列)がパターンと一致するように見えます。

修正するには、とを使用して、文字列全体が一致している必要があり^ます$

var pattern= /^[A-Z]'?(\*[A-Z]'?)*(\+[A-Z]'?(\*[A-Z]'?)*)+$/;

g一致するのは1つだけであるため、このコンテキストではフラグは意味をなさなくなることに注意してください。

于 2012-03-28T16:26:48.467 に答える
0

同じことを試しましたが"A*B+C"、文字列と一致しているため、これをオンラインテスターに​​誤って入力したに違いないと思い"A*3+A*B+CD"ます。

ここに画像の説明を入力してください

文字列全体がパターンと一致する場合にのみ一致させたい場合は、文字列アンカーの開始と終了を追加します。

/^[A-Z]'?(\*[A-Z]'?)*(\+[A-Z]'?(\*[A-Z]'?)*)+$/g
于 2012-03-28T16:27:02.450 に答える