gpt4 book ai didi

javascript - 正则表达式匹配和递增文件名 (n)

转载 作者:行者123 更新时间:2023-11-29 10:27:21 25 4
gpt4 key购买 nike

我需要编写一个正则表达式来确保没有文件名冲突。

所以我让用户能够另存为一些名字,然后我根据数组检查字符串,如果有冲突,我遵循 Windows 保存范例。

如果你保存test,它会保存为test,如果你再次尝试保存test,它会变成test (1)。现在我想寻找那个 (1) 所以

条件

它将始终以 ( 开始,然后是 N 个 0-9 个字符,并以 ) 结束。

我如何使用正则表达式查找 (1)(169)
我不确定我可以将此 Regex 写成的最短字符数。同样作为辅助正则表达式,我如何拥有相同的正则表达式,但也寻找相同的正则表达式,但在 (?

尝试:

我想出了 const regEx = RegExp(/(?:\()[0-9*](?:\))/) 但这只适用于 ( 1) 但不是 (11) 我也不知道如何在 (

这可能非常简单,但我对正则表达式不是很有经验。

不应该工作的字符串示例

// Should work:
test (1)
test (594)
test (54)

// Shouldn't work
test (1
test 594)
test 54

最佳答案

字符串应该结束 space(one or more digits)endOfString 这样你就可以:

\s\((\d+)\)$

\d+ 周围的附加括号(Capturing Group)用于提取数字:

https://regex101.com/r/5OFix0/1

匹配

const sample = `test (0)
test (12)
test()
test(1)
test 1
ends with space (123) `;


sample.split('\n').forEach(fileName => {

const m = /\s\((\d+)\)$/.exec(fileName);

if (m && m[1]) { // if is incremented, AKA "fileName (n)"
console.log(m[1]); // do your stuff here using m[1] string
}

});

匹配和替换

这是一个给定文件名样本(不带扩展名)的示例:

/**
* Detect " (n)" suffixed string. Return "n"
* @param {String} name
* @return {String|null} The integer string or null
*/
const isFilenameIncremented = name => {
const m = /\s\((\d+)\)$/.exec(name);
return m && m[1];
};

/**
* Increment unsuffixed or " (n)" suffixed string
* @dependency {Function} isFilenameIncremented
* @param {String} name
* @return {String} The " ((n|0)+1)" suffixed filename
*/
const incrementFilename = name => {
const isInc = isFilenameIncremented(name);
return isInc ? name.replace(/\d+(?=\)$)/, m => (+m)+1) : `${name} (1)`;
}


const sample = `test (0)
test (12)
test()
test(1)
test 1
ends with space (123) `;

sample.split('\n').forEach(filename => {
const fileNameIncr = incrementFilename(filename);
console.log( fileNameIncr )
});

应该只增加前两个文件名(0 到 1 和 12 到 13)并将 (1) 附加到所有其他文件名,结果如下:

test (1)  
test (13)
test() (1)
test(1) (1)
test 1 (1)
ends with space (123) (1)

显然,上面仍然缺少的是检查该文件名是否已经存在于 filenames 数组中,这可以通过使用 fileNamesArray.includes(fileName) 轻松实现

关于javascript - 正则表达式匹配和递增文件名 (n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55598588/

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