如何检查字符串是否与带星号的模式匹配

时间:2014-05-28 18:30:33

标签: javascript node.js

我有一个文件列表:

var files = [
    "user_parse_info",
    "user_parse_age",
    "site_render_info",
    "site_parse_name"
]

现在我有一个模式:

var pattern = "site_*_name";

这应该只匹配最后一个文件。 我怎么检查这个?也许是RegExp?

2 个答案:

答案 0 :(得分:2)

是的,正则表达式对此更好。

var _ = require('nimble');

var files = [
    "user_parse_info",
    "user_parse_age",
    "site_render_info",
    "site_parse_name"
];

var re = /^site_.*_name$/;

var result = _.filter(files, function (val) {
     return re.test(val);
});

答案 1 :(得分:0)

使用正则表达式意味着您需要转义某些字符,例如.$,否则它们可能会出现误报或使模式不匹配任何内容。

您可以将字符串拆分为星号,并根据字符串检查部分:

var parts = pattern.split('*');

if (
  str.length >= parts[0].length + parts[1].length &&
  str.substr(0, parts[0].length) == parts[0] &&
  str.substr(str.length - parts[1].length) == parts[1])
{
  // matches
}

演示:http://jsfiddle.net/Guffa/u8XEE/