是否有一个正则表达式可以将 10 位数字(通常是不连续的)放入命名捕获组中?

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

我有一个用户输入字符串,应该包含至少 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})/
javascript regex regex-group
1个回答
0
投票

您不能拥有由不连续的比赛组成的单个组。

您可能要做的就是匹配前 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)

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