2012-03-28 3 views
2

Я хотел бы проверить DNF (Disjunctive normal form), который выглядит следующим образом: A*B+A'*C+C*D*E'. Для этой цели я использую folloing следующую закономерность:Шаблон для функции DNF (регулярное выражение javascript)

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

Я проверил эту схему с помощью яваскрипта метод испытания() в этом онлайн-инструмент: 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> 

Проблема заключается в том, я не понимаю, почему флаг (в этом коде) стать «истинным», который должен быть «ложными», вызывают термины A * 3 и CD в dnf="A*3+A*B+CD".

У меня есть testet это в онлайн-тестере, и в нем говорится: нет совпадений, что я считаю правильным.

ответ

0

Я думаю, вы должны ввести это в онлайн-тестер неправильно, потому что я попробовал то же самое, и это соответствие "A*B+C" из строки "A*3+A*B+CD":

enter image description here

Если вы хотите, чтобы соответствовать, если вся строка соответствует своему шаблону, добавить начало и конец строки якорей:

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

круто спасибо за объяснение :) –

1

Вы не указываете, что матч должен начинаться с начала строки или конца в конце ее. Поэтому, если подстрока совпадает, шаблонный тест вернет true. В этом случае он выглядит как A*B+C (подстрока вашей исходной строки) будет соответствовать шаблону.

Чтобы исправить, необходимо, чтобы вся строка не соответствует, используя ^ и $:

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

Обратите внимание, что g флаг больше не имеет смысла в этом контексте, как вы можете иметь только один матч.

+0

Я испытал это, он работает спасибо :) –

Смежные вопросы