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

Javascript 如何检查字符串是否与带星号的模式匹配,javascript,node.js,Javascript,Node.js,我有一个文件列表: var files = [ "user_parse_info", "user_parse_age", "site_render_info", "site_parse_name" ] 现在我有了一个字符串模式: var pattern = "site_*_name"; 这应该只匹配最后一个文件。 我怎么检查这个?也许是一个RegExp?是的,正则表达式是一个更好的选择 var _ = require('nimble'); var files

我有一个文件列表:

var files = [
    "user_parse_info",
    "user_parse_age",
    "site_render_info",
    "site_parse_name"
]
现在我有了一个字符串模式:

var pattern = "site_*_name";
这应该只匹配最后一个文件。
我怎么检查这个?也许是一个RegExp?

是的,正则表达式是一个更好的选择

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);
});

使用正则表达式意味着您需要转义一些字符,如
$
,否则它们可能会给出误报或阻止模式匹配任何内容

您只需拆分星号上的字符串,然后对照字符串检查各个部分:

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
}

演示:

谢谢您的回答。我想是出了什么问题。看一看:太好了:)你可以使用敏捷来迭代抛出arraygreat任务!如果我们用大括号,它也会起作用。。。(站点)*(_名称)这是最好的解决方案,因为它是纯JS。不需要服务器端JS或require()。