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