【问题标题】:Match strings using asterisks (wildcards) [duplicate]使用星号(通配符)匹配字符串 [重复]
【发布时间】:2019-01-08 23:40:11
【问题描述】:

我想测试数组中的任何字符串是否与特定字符串匹配。但是,数组中的字符串可能包含星号模式。

var toTest = ["foo_*", "*foo_1", "foo_1*", "bar", "*foo"];
var toMatch = "foo_1";

对于此示例,结果将为真,因为 foo_**foo_1foo_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


【解决方案1】:

为了达到预期的效果,请使用以下使用过滤器、indexOf 和替换的选项

var toTest = ["foo_*", "*foo_1", "foo_1*", "bar", "*_foo"];
var toMatch = "foo_1";

console.log(toTest.filter(v => toMatch.indexOf(v.replace('*', '')) !== -1))

【讨论】:

  • *_foo 应该是 *foo 并且它不应该出现在列表中。
  • @kemicofa,我刚刚看到问题被修改了
  • 是的,你的数组中没有*foo,而是*_foo
猜你喜欢
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 2018-06-15
相关资源
最近更新 更多