2012-03-28 3 views
2

A*B+A'*C+C*D*E'のようなDNF(論理和正規形)を検証したいと思います。この目的のために、私はfolloing次のパターンを使用します。DNF関数のパターン(javascriptの正規表現)

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

私はこのオンラインツールではjavascriptのテスト()メソッドを使用してこのパターンをテストした: http://www.pagecolumn.com/tool/regtest.htmをし、それは私に私が期待している結果を提供します。

私は、次のコードを使用して、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> 

(このコードで)フラグをしていた、「真」になって、なぜ問題は、私は理解していない、あります「偽」であると、dnf="A*3+A*B+CD"にA * 3とCDという用語があります。

私はオンラインテスターでこれをテストしています。これは、一致しないと思います。

答えて

0

は、私は同じことをしようとしたので、あなたは、誤っオンラインテスターに​​これを入力しておく必要があり、それは文字列"A*3+A*B+CD"から"A*B+C"をマッチングされると思う:

enter image description here

あなたがいる場合にのみ一致させたい場合文字列全体がパターンに一致し、文字列のアンカーの先頭と末尾を追加します。

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

coolありがとうございました:) –

1

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

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

注意をあなたが唯一の一致を持つことができるようgフラグはもはや、このコンテキストで任意の理にかなっていること:修正するには

は、^$を使用していない、文字列全体が一致していることが必要です。

+0

私はこれをテストしました。それはあなたに感謝します:) –