Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解释这个正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 解释这个正则表达式

Javascript 解释这个正则表达式,javascript,regex,Javascript,Regex,我使用这个正则表达式来匹配一些字符串: ^([^\s](-)?(\d+)?(\.)?(\d+)?)$/ 我不明白为什么允许输入两个点,比如。 我的理解是,只允许放置1个破折号,或者不允许放置任何破折号(?) 任何无限制或无限制的数字(\d+)? 一点或无(\)? 为什么允许放置。甚至.4.6 在[^\s]中进行的测试意味着任何不是空白的内容。这包括点。尝试匹配。将使您: [^\s]匹配 (-)不匹配 (\d+)?不匹配 (\)?匹配 (\d+)?不匹配 我假设您想要匹配数字(可能是负数/浮点

我使用这个正则表达式来匹配一些字符串:

^([^\s](-)?(\d+)?(\.)?(\d+)?)$/
我不明白为什么允许输入两个点,比如

我的理解是,只允许放置1个破折号,或者不允许放置任何破折号
(?)
任何无限制或无限制的数字
(\d+)?
一点或无
(\)?

为什么允许放置
甚至
.4.6

[^\s]
中进行的测试意味着任何不是空白的内容。这包括点。尝试匹配
将使您:

  • [^\s]
    匹配
  • (-)
    不匹配
  • (\d+)?
    不匹配
  • (\)?
    匹配
  • (\d+)?
    不匹配

  • 我假设您想要匹配数字(可能是负数/浮点数):

    [^\s]
    表示任何非空白的内容。这包括点。尝试匹配
    将使您:

  • [^\s]
    匹配
  • (-)
    不匹配
  • (\d+)?
    不匹配
  • (\)?
    匹配
  • (\d+)?
    不匹配

  • 我假设您想要匹配数字(可能是负数/浮点数):

    • ^
    • ([^\s](-)(\d+)(\)(\d+))
      • [^\s]
        • \s
      • (-)
        • -
      • (\d+)?
        • \d+
          • +
      • (\)?
        • \。
      • (\d+)?
        • \d+
          • +
    • $
    • /

    • ^
    • ([^\s](-)(\d+)(\)(\d+))
      • [^\s]
        • \s
      • (-)
        • -
      • (\d+)?
        • \d+
          • +
      • (\)?
        • \。
      • (\d+)?
        • \d+
          • +
    • $
    • /

    创建,正如我在评论中提到的,
    [^\n]
    是一个与
    匹配的否定字符类。由于还有另一个
    (\)?
    模式,正则表达式可以匹配两个连续的点(因为除了
    [^\s]
    之外的所有部分都是可选的)

    为了不匹配字符串,如
    .4.5
    ,只需将
    添加到
    [^\n]
    否定字符类:

    ^([^\s.](-)?(\d+)?(\.)?(\d+)?)$
          ^
    
    看。这将不允许初始捕获组中有任何

    您可以使用“向前看”仅禁止第一个字符作为点:

    ^(?!\.)([^\s](-)?(\d+)?(\.)?(\d+)?)$
    

    所有解释可在在线regex测试员处获得:

    要匹配所需格式的数字,请使用

    ^(?:[-]?\d+\.?\d*|-)$
    
    易读的解释:

    • ^
      -字符串的开头,然后有两个选项
    • [-]?
      -可选连字符
    • \d+
      -1个或多个数字
    • \?
      -可选点
    • \d*
      -0或更多数字
    • |
      -或-
    • -
      -连字符
    • $
      -字符串结尾

    请参见

    正如我在评论中提到的,
    [^\n]
    是一个与
    匹配的否定字符类。由于还有另一个
    (\)?
    模式,正则表达式可以匹配两个连续的点(因为除了
    [^\s]
    之外的所有部分都是可选的)

    为了不匹配字符串,如
    .4.5
    ,只需将
    添加到
    [^\n]
    否定字符类:

    ^([^\s.](-)?(\d+)?(\.)?(\d+)?)$
          ^
    
    看。这将不允许初始捕获组中有任何

    您可以使用“向前看”仅禁止第一个字符作为点:

    ^(?!\.)([^\s](-)?(\d+)?(\.)?(\d+)?)$
    

    所有解释可在在线regex测试员处获得:

    要匹配所需格式的数字,请使用

    ^(?:[-]?\d+\.?\d*|-)$
    
    易读的解释:

    • ^
      -字符串的开头,然后有两个选项
    • [-]?
      -可选连字符
    • \d+
      -1个或多个数字
    • \?
      -可选点
    • \d*
      -0或更多数字
    • |
      -或-
    • -
      -连字符
    • $
      -字符串结尾

    请参见

    哪些字符串需要匹配,哪些字符串不需要匹配
    [^\n]
    是一个与
    匹配的否定字符类。将其添加到
    [^\n.]
    ,和。您希望匹配哪些字符串,哪些字符串不希望匹配
    [^\n]
    是一个与
    匹配的否定字符类。将其添加到
    [^\n.]
    ,然后。完全正确。也许会澄清一下,我怎么可能没注意到呢。非常感谢。完全正确。也许会澄清一下,我怎么可能没注意到呢。非常感谢。我要做的是匹配任何十进制数,包括负数,但不是空字符串。1-允许-1-允许1.-允许-1.-Allowed 1.0-Allowed-1.0-Allowed抱歉,“-”也需要有效。“-”“允许”-“不允许”。“不允许”请不要花费你的全部时间,你已经帮助了一个洛蒂。我正在对键盘进行验证,用户正在写十进制数,他可以开始了