除了以7开头的10位数字外,我想捕获所有数字(任何数字的数字)。
71234567890 - 应该匹配
7123456789 - 不应该匹配
1234567890-应匹配
答案 0 :(得分:1)
使用模式
/7\d{9}|(\d+)/
^^^^^^ MATCH 10-DIGIT NUMBER STARTING WITH SEVEN, DO NOT CAPTURE
^ --OR--
^^^^^ MATCH OTHER SEQUENCES OF DIGITS AND DO CAPTURE
这将匹配从7开始的10位数字,但不捕获它;否则,它将匹配数字序列并捕获它。
现在
'7123456789'.match(regexp)
["7123456789", undefined]
'1234567890'.match(regexp)
["1234567890", "1234567890"]
换句话说,捕获的字符串将在match
返回的数组的第二个元素中找到。
如果要将其锚定到字符串的开头和结尾,那么
/^7\d{9}$|(^\d+$)/
您也可以按照评论中的建议进行否定预测,但这里不需要它,对于开始的regexpers来说可能有点延伸。
答案 1 :(得分:0)
(?:(?:^|\D)(7\d{1,8}|7\d{10,})(?:\D|$))
请参阅DEMO
答案 2 :(得分:0)
为了获得任意数字的数字,除了以' 7'
开头的10位数字的字符串
你需要特殊情况的' 7'。真的没有办法解决它。
最快的方法是纯正则表达式解决方案,因为引擎留在内部 运行c ++引擎代码,不与主机语言交互。
有两种方式,无论是锚定还是中间串。
锚定:^(?:7(?!\d{9}$)|[012345689])\d*$
(数字字符串是整体匹配,即在捕获组0 中)
^ # Beginning of string
(?: # Cluster, get first digit
7 # '7'
(?! \d{9} $) # not followed by nine more digits
| # or
[012345689] # Any digit except '7' (i.e. [^\D7])
) # End cluster
\d* # Get optional remaining digits
$
中间字符串:(?:^|\D)((?:7(?!\d{9}(?:\D|$))|[012345689])\d*)
(数字字符串位于捕获组1 中)
(?: ^ | \D ) # Beginning of string or not a digit
( # (1 start), The number
(?: # Cluster, get first digit
7 # '7'
(?! # Assertion, not followed by nine more digits
\d{9}
(?: \D | $ ) # (forces no more/less than nine) digits
)
| # or
[012345689] # Any digit except '7' (i.e. [^\D7])
) # End cluster
\d* # Get optional remaining digits
) # (1 end)