JavaScript RegExp多命名捕获组

unftdfkk  于 2023-10-22  发布在  Java
关注(0)|答案(2)|浏览(101)

我想一个RegExp捕捉图片,视频和文字在字符串的数量。该字符串可以包含一个、两个、全部或不包含任何类别。这是我得到的最接近这些结果的结果。
你的帮助会在前世得到丰厚的回报。😁

const text = "\t\t                          3222 pics\n" +
             "\t\t                          20 vids\n" +
             "\t\t                          1 writing\n";
console.log(text);

const pattern = /(?<pics>(\d+(?= pic)?))(?<vids>(\d+(?= vid)?))(?<writings>(\d+(?= writing)?))/gi;

matches = pattern.exec(text);
console.log(matches);
console.log("pics : " + matches.groups.pics); //expecting 3222
console.log("vids : " + matches.groups.vids); //expecting 20
console.log("writings : " + matches.groups.writings); //expecting 1
7gs2gvoe

7gs2gvoe1#

你可以提取任何一对出现在一行末尾的整数和单词,并从这些对中构造一个对象(作为键/值对):

const text = "\t\t                          3222 pics\n" +
             "\t\t                          20 vids\n" +
             "\t\t                          1 writing\n";

const regex = / (\d+) (\w+)\n/gi;

const res = Object.fromEntries(
    Array.from(text.matchAll(regex), ([, val, key]) => [key, +val])
);

console.log(res);
5w9g7ksd

5w9g7ksd2#

这里的一个基本方法是使用 * 单行 * 模式,并将数字与文本隔离开来。

(\d+) pics.+?(\d+) vids.+?(\d+) writing
var s = `\t\t                          3222 pics
\t\t                          20 vids
\t\t                          1 writing`
var p = /(\d+) pics.+?(\d+) vids.+?(\d+) writing/gs
var m = p.exec(s)
console.log("pics : " + m[1])
console.log("vids : " + m[2])
console.log("writings : " + m[3])

相关问题