JavaScript RegExp 多个命名捕获组

问题描述 投票:0回答:2

我想要一个正则表达式来捕获字符串中图片、视频和文字的数量。该字符串可以包含一个、两个、全部或不包含任何类别。这是我得到的最接近这些结果的结果。

你的帮助将会在前世得到丰厚的回报。 😁

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

javascript regex regex-group
2个回答
2
投票

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

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);


0
投票

这里的基本方法是利用单行模式,并将数字与文本隔离。

(\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])

© www.soinside.com 2019 - 2024. All rights reserved.