Шаблон для функции DNF (регулярное выражение JavaScript) - PullRequest
2 голосов
/ 28 марта 2012

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

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

Я протестировал этот шаблон с помощью метода javascript test () в этом онлайн-инструменте: 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>

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

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

Ответы [ 2 ]

1 голос
/ 28 марта 2012

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

Для исправления требуется соответствие всей строки, используя ^ и $:

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

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

0 голосов
/ 28 марта 2012

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

enter image description here

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

/^[A-Z]'?(\*[A-Z]'?)*(\+[A-Z]'?(\*[A-Z]'?)*)+$/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...