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