【发布时间】:2019-01-08 23:40:11
【问题描述】:
我想测试数组中的任何字符串是否与特定字符串匹配。但是,数组中的字符串可能包含星号模式。
var toTest = ["foo_*", "*foo_1", "foo_1*", "bar", "*foo"];
var toMatch = "foo_1";
对于此示例,结果将为真,因为 foo_*、*foo_1 和 foo_1* 将与 foo_1 匹配,但 bar 和 *foo 不会。
我曾尝试将 split 函数与 lodash _.some 一起使用,但它似乎过于复杂,我无法使其始终如一地工作。
function isMatching() {
return _.some(toTest , function(a) {
return _.some(a.split("*"), function(part1, idx1) {
return (part1.length && _.some(toMatch.split(part1), function(part2, idx2) {
return (part2.length && idx1 == idx2);
}));
});
});
}
【问题讨论】:
-
可以有 > 1 个通配符吗?即
"*foo_*_bar"? -
不需要,不。只有一个通配符
-
你的意思是*应该匹配所有吗?例如。使用
foo_1进行测试时,foo_*应该返回 true? -
@LuisÁvila 是的,没错。
标签: javascript