我有一个用户输入字符串,应该包含至少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})/
2条答案
按热度按时间fxnxkyjh1#
不能有一个由非连续匹配项组成的组。
你可以做的是匹配前10位数字,然后从中删除非数字。
注意
\D
也匹配换行符。如果需要10位或更多位数,则量词将变为
{9,}
另一个选项可以是修改groups.anyVal属性的值:
ffscu2ro2#
可以使用以下正则表达式模式:
(?<anyTen> ... )
:这是一个名为“anyTen”的命名捕获组。(?: ... )
:这是一个非捕获组。它允许我们对模式进行分组,而无需创建单独的捕获组。\D*
:匹配零个或多个非数字字符。\d
:匹配一个数字。{10,}
:至少匹配前一个模式(非数字后跟数字)10次。使用方法:
这将输出: