我有以下包含路径的字符串数组(请参见下面的代码)。我需要检查所有字符串是否都与变量 someFolderName 开头的“ boat:/”匹配。之后,允许使用所有符号,例如a-z,A-Z,0-9,-和_。
我开始使用 regex.test(string)的方式,想知道为什么某些通常应该涵盖的情况不起作用。
经过一段时间和一些新的灰色脑细胞,我想出了使用 string.match(regex)的方法,并且我所有的测试用例都开始例外工作。
有人可以向我解释为什么在使用 regex.test(string)时某些情况不起作用吗?
我还使用该工具按照两个正则表达式检查了我的每个代码(在代码中),并获得了100%的覆盖率。
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] + "\"");
}
}
}