为什么正则表达式匹配返回与正则表达式测试不同的值?

时间:2019-07-03 14:27:03

标签: javascript regex

我有以下包含路径的字符串数组(请参见下面的代码)。我需要检查所有字符串是否都与变量 someFolderName 开头的“ boat:/”匹配。之后,允许使用所有符号,例如a-z,A-Z,0-9,-和_。

我开始使用 regex.test(string)的方式,想知道为什么某些通常应该涵盖的情况不起作用。

经过一段时间和一些新的灰色脑细胞,我想出了使用 string.match(regex)的方法,并且我所有的测试用例都开始例外工作。

有人可以向我解释为什么在使用 regex.test(string)时某些情况不起作用吗?

我还使用该工具按照两个正则表达式检查了我的每个代码(在代码中),并获得了100%的覆盖率。

正则表达式a:click
正则表达式b:click

someFolderName 应该保持可交换变量。 片段:

var arr = ["boat:/", "boat:/rumpf", "boat:/rumpf/kiel", "boat:/rumpf/schiffschraube", "boat:/deck", "boat:/deck/steuer", "boat:/deck/mast", "boat:/deck/mast/segel", "hase", "maus", "mouse:/"];
var someFolderName = "boat";
var a = new RegExp("^" + someFolderName + ":\/+[a-zA-Z0-9\/_-]*$", "gimu");
var b = new RegExp("^" + someFolderName + ":(\/[a-zA-Z0-9-_]+)*$|^" + someFolderName + ":[/]{1}([a-zA-Z0-9-_]+)*$", "gimu");

console.log(arr.join(" - "));
console.log("=======================================");

console.log(a);
testTest(a);
testMatch(a);
console.log("=======================================");

console.log(b);
testTest(b);
testMatch(b);
console.log("=======================================");

function testTest(reg) {
  for (var i = 0; i < arr.length; i++) {
    if (reg.test(arr[i])) {
      console.log('test   : \"' + arr[i] + "\"");
    } else {
      console.log('no test: \"' + arr[i] + "\"");
    }
  }
}

function testMatch(reg) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i].match(reg)) {
      console.log('match   : \"' + arr[i] + "\"");
    } else {
      console.log('no match: \"' + arr[i] + "\"");
    }
  }
}

0 个答案:

没有答案