2012-03-28 12 views
2

Ich möchte die DNF (disjunktive Normalform) validieren, die so aussieht A*B+A'*C+C*D*E'. Dazu verwende ich das folloing folgende Muster:Muster für DNF-Funktion (javascript regular expression)

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

ich dieses Muster getestet habe Javascript-Test() -Methode in diesem Online-Tool: http://www.pagecolumn.com/tool/regtest.htm und es gibt mir das Ergebnis, das ich erwartet habe.

Ich habe versucht, das Muster mit Javascript zu testen, mit dem folgenden Code:

<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> 

Das Problem ist, ich verstehe nicht, warum Flag (in diesem Code) wird "true", was muss "falsch" sein, verursachen die Begriffe A * 3 und CD im dnf="A*3+A*B+CD".

Ich habe das im Online-Tester getestet und es heißt: keine Übereinstimmungen, was ich für richtig halte.

Antwort

0

Ich glaube, Sie müssen dies nicht richtig in den Online-Tester eingegeben haben, weil ich die gleiche Sache ausprobiert und es ist passend "A*B+C" aus dem String "A*3+A*B+CD":

enter image description here

Wenn Sie nur übereinstimmen sollen, wenn die gesamte Zeichenfolge entspricht Ihr Muster, fügen Sie Anfang und Ende des Zeichenfolge Ankers:

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

danke kühl für die Erklärung :) –

1

Sie geben nicht an, dass die Übereinstimmung am Anfang der Zeichenfolge beginnen oder am Ende enden muss. Wenn also ein Teilstring übereinstimmt, gibt der Mustertest true zurück. In diesem Fall sieht es so aus, als ob A*B+C (ein Teilstring Ihrer ursprünglichen Zeichenkette) mit dem Muster übereinstimmt.

zu beheben, erfordern, dass die gesamte Zeichenfolge übereinstimmt, ^ und $ mit:

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

Beachten Sie, dass die g Flagge keinen Sinn mehr in diesem Zusammenhang macht, da man nur ein Spiel haben kann.

+0

ich dies getestet, es funktioniert danke :) –