javascript - DNF 函数模式(javascript 正则表达式)

标签 javascript regex regular-language

我想验证看起来像这样的 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>

问题是,我不明白,为什么标志(在此代码中)变为“真”,而必须为“假”,因为 dnf="A* 中的术语 A*3 和 CD 3+A*B+CD”.

我已经在在线测试器中对此进行了测试,它说:没有匹配项,我认为是正确的。

最佳答案

您没有指定匹配必须从字符串的开头开始或在字符串的结尾结束。因此,如果子字符串匹配,模式测试将返回 true。在这种情况下,看起来 A*B+C(原始字符串的子字符串)将匹配该模式。

要修复,要求整个字符串匹配,使用 ^$:

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

请注意,g 标志在此上下文中不再有任何意义,因为您只能匹配一个。

关于javascript - DNF 函数模式(javascript 正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9911667/

相关文章:

Python 正则表达式 url 抓取

javascript - 如何定义模式并允许模式仅在模式被破坏时重复

regular-language - 抽引理以表明 `{a^n b^m | n=km for k in N}` 不是正则

javascript - Highcharts:滚动 highcharts 容器内的文本区域; highcharts 容器内的自定义表格

javascript - JQuery 隐藏\显示是否选中复选框

javascript - 递归 .children() 以搜索 id 属性

javascript - 禁用输入类型=按钮的标签

Python 正则表达式 r 前缀后跟三个单(或双)引号

r - 匹配模式,只要它不包含特定字符串

ios - RegExp结果不是我的预期