gpt4 book ai didi

javascript - 根据可选正则表达式与优先级匹配的数量过滤数组

转载 作者:行者123 更新时间:2023-11-28 05:17:53 25 4
gpt4 key购买 nike

假设我有一个文件数组,这些文件已从更大的文件数组中与下面代码中的表达式进行了匹配。为了简单起见,我将说文件数组如下:

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;
}, []);
}

最佳答案

假设您的文件组具有您提到的结构,并且您想要按顺序检索包含更多部分的文件(第 1 部分比第 3 部分具有更高的优先级),您可以执行如下操作:

  1. 使用部分数量作为标准对 selectedFiles 数组进行排序。为此,请将文件名转换为数字(数字对应于每个部分的每个数字的串联)。
  2. 将关系编号文件存储在字典中。
  3. 从字典中检索文件名,键为有序数组中的第一个元素。

var chosenFiles = ['prefix_pt1_pt3_pt5_pt6',
'prefix_pt1_pt4_pt5_pt6',
'prefix_pt1_pt3_pt4_pt6',
'prefix_pt1_pt5_pt6'
],
dicc = {};

function getKey(arr) {
return arr.join('');
}

function addEntry(file, index) {
var numberArr = file.replace(/\D+/g, '-').split('-').splice(1).map(Number);
dicc[getKey(numberArr)] = file;
return numberArr;
}

function sortByFileNumber(a, b) {
var i = 0;
while (a[i] && b[i] && a[i] >= b[i++]) {}
return a === b ? 0 : a[i] ? -1 : 1;
}

function pickFirst(arr) {
return dicc[getKey(arr[0])];
}

var chosenFile = pickFirst(chosenFiles
.map(addEntry)
.sort(sortByFileNumber));

console.log(chosenFile);

关于javascript - 根据可选正则表达式与优先级匹配的数量过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40824389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com