我有一个用户输入字符串,应该包含至少 10 位数字,但它们可能不连续。这些可能的用户输入:
"What is 12? Can we 345 the loan to 678-90"
">>123456789--0"
"1234567890541112144847-909"
"Maybe try 123456 with 7890 too"
我想要一个正则表达式给我
match.groups.anyTen = '1234567890'
。
我已经尝试过
/\d+/g
,但我无法将匹配项合并到单个命名组中。 /(?<anyTen>\d+/g
仅命名连续数字的第一个匹配项。
其他失败:
/(?<anyTen>\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*\d\D*)/
/(?<anyTen>\d{1,10})/
/(?<anyTen>\D*(\d\D*){10})/
您不能拥有由不连续的比赛组成的单个组。
您可能要做的就是匹配前 10 位数字,然后从中删除非数字。
const s = `"What is 12? Can we 345 the loan to 678-90"
">>123456789--0"
"1234567890541112144847-909"
"Maybe try 123456 with 7890 too"`;
const regex = /^[^\d\n]*(?<anyTen>\d(?:[^\d\n]*\d){9})/gm;
const result = Array.from(
s.matchAll(regex), m =>
m.groups.anyTen.replace(/\D+/g, "")
);
console.log(result)