文件名示例
-
FDIP_en-gb-nn_Text_v1_YYYYMMDD_SequenceNumber.txt
-
FDIP_fr-fr-nn_Text_v1_YYYYMMDD_SequenceNumber.txt
-
FDIP_de-de-nn_Text_v1_YYYYMMDD_SequenceNumber.txt
REGEX是FDIP_([a-z]{2}-[A-Z]{2}-[a-z]{2})_Text_v1_[0-9]{8}_[0-9]{14}.txt
我唯一需要的是翻译代码,它是"en-gb"、"fr-fr"、"de-de"。
如何提取文件名的这一部分?
修改正则表达式,使其与数字和文本匹配。你可以在这里玩
解释要捕获一个组,您需要将正则表达式封装到()
中,这将作为一个组进行捕获。
要进行命名捕获,您可以(?<name_of_group>)
,然后可以按名称访问。
匹配过程如下。
[a-z]{2}
匹配来自a-z
的2个字符
[a-zA-Z0-9]
匹配a-z or A-Z or 0-9
的任何字符
g
表示全局标志,即全部匹配。
i
表示忽略大小写。
var r = /FDIP_([a-z]{2}-[A-Z]{2})-[a-z]{2}_Text_v1_[0-9A-Z]{8}_[A-Z0-9]{14}.txt/gi;
let t = 'FDIP_en-gb-nn_Text_v1_YYYYMMDD_SequenceNumber.txt';
let dd = r.exec(t);
console.log(dd[1]);
这是组捕获的示例
请参阅regex
中的名称,并且对象销毁名称匹配。
const { groups: { language } } = /FDIP_(?<language>[a-z]{2}-[A-Z]{2})-[a-z]{2}_Text_v1_[0-9A-Z]{8}_[A-Z0-9]{14}.txt/gi.exec('FDIP_en-gb-nn_Text_v1_YYYYMMDD_SequenceNumber.txt');
console.log(language);
要解决您的问题,您应该:
- 修复正则表达式:
FDIP_([a-z]{2}-[A-Z]{2}-[a-z]{2})_Text_v1_[0-9]{8}_[0-9]{14}.txt
// to
FDIP_([a-z]{2}-[a-z]{2})-[a-z]{2}_Text_v1_[0-9]{8}_[0-9]{14}.txt
- 使用
regex.exec
函数从first group
获取值
const fileNames = [
'FDIP_en-gb-nn_Text_v1_20190101_12345678901234.txt',
'FDIP_fr-fr-nn_Text_v1_20200202_12345678901234.txt',
'FDIP_de-de-nn_Text_v1_20180808_12345678901234.txt']
const cultureNames = fileNames.map(name => {
const matched = /FDIP_([a-z]{2}-[a-z]{2})-[a-z]{2}_Text_v1_[0-9]{8}_[0-9]{14}.txt/.exec(name)
return matched && matched[1]
})
console.log(cultureNames)
更改FDIP_([a-z]{2}-[A-Z]{2}-[a-z]{2})_Text_v1_[0-9]{8}_[0-9]{14}.txt
至
let pattern = /FDIP_([a-z]{2}-[a-z]{2})-[a-z]{2}_Text_v1_[w]{8}_[w]{14}.txt/;
var str = 'FDIP_en-gb-nn_Text_v1_YYYYMMDD_SequenceNumber.txt';
console.log(str.match(pattern)[1]);