提取正则表达式名称的一部分



文件名示例

  1. FDIP_en-gb-nn_Text_v1_YYYYMMDD_SequenceNumber.txt

  2. FDIP_fr-fr-nn_Text_v1_YYYYMMDD_SequenceNumber.txt

  3. 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]);

相关内容

最新更新