1
说我有一个文件数组,这些文件已经从下面我的代码中的更大的文件数组中匹配。为简单起见,我会说文件阵列如下:根据可选RegEx匹配的数量过滤数组
prefix_pt1_pt3_pt5_pt6
prefix_pt1_pt4_pt5_pt6
prefix_pt1_pt3_pt4_pt6
prefix_pt1_pt5_pt6
然而,文件名不一定顺序。我想优先考虑每个捕获组。我到目前为止编写的代码只会优先考虑文件,直到它与捕获组不匹配,所以从上面的文件中只选择第一个。我想prefix_pt1_pt3_pt4_pt6
是我的功能的结果。
const parts = ['p1', 'p2', 'p3', 'p4', 'p5', 'p6'];
const existsRegex = new RegExp(
regexEscape(params.folder) +
regexEscape(prefix) +
parts.reduce((result, part) => result + `(_${regexEscape(part)})?`, '')
);
const validFiles = scanPath(existsRegex);
if (validFiles.length) {
const chosenFile = validFiles.reduce((file, currentFile) => {
const matches = currentFile.match(existsRegex);
const killFrom = matches.indexOf(undefined);
if (killFrom > 0) matches.length = killFrom;
if (matches.length > file.length) return matches;
return file;
}, []);
}
谢谢您的回答,可惜我是不是跟我原来的问题不够清楚的文件部分不一定是连续的。它们的顺序/优先级在用于构建RegExp的数组中已经是正确的('parts'),所以希望您给我的帮助可以帮助我找到解决方案。 – Cordegen
那么,我的整个想法就是这样,给你一个如何解决问题的想法。很难(有时不可能)给出准确的答案(大多数情况下,问题只是指出问题的一部分)。请考虑将我的答案标记为问题的答案,以便它能够引导您解决问题。谢谢 :) – acontell