2

我想验证看起来像这样的 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*3+A*B+CD".

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

4

2 回答 2

1

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

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

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

请注意,该g标志在这种情况下不再有意义,因为您只能有一个匹配项。

于 2012-03-28T16:26:48.467 回答
0

我认为您一定是错误地将其输入到在线测试器中,因为我尝试了同样的事情并且它"A*B+C"与字符串匹配"A*3+A*B+CD"

在此处输入图像描述

如果您只想匹配整个字符串是否与您的模式匹配,请添加字符串锚点的开始和结束:

/^[A-Z]'?(\*[A-Z]'?)*(\+[A-Z]'?(\*[A-Z]'?)*)+$/g
于 2012-03-28T16:27:02.450 回答