我想要一个正则表达式来捕获字符串中图片、视频和文字的数量。该字符串可以包含一个、两个、全部或不包含任何类别。这是我得到的最接近这些结果的结果。
你的帮助将会在前世得到丰厚的回报。 😁
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
您可以提取出现在行尾的任意一对整数和单词,并从这些对(作为键/值对)构造一个对象:
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);
这里的基本方法是利用单行模式,并将数字与文本隔离。
(\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])