正则表达式匹配除了以7开头的10位数字之外的任何数字组

时间:2016-04-01 01:40:27

标签: javascript regex

除了以7开头的10位数字外,我想捕获所有数字(任何数字的数字)。

71234567890 - 应该匹配
7123456789 - 不应该匹配
1234567890-应匹配

3 个答案:

答案 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)