解释这个正则表达式js

时间:2015-08-11 14:15:19

标签: javascript regex

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

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

我很困惑为什么允许输入两个点,例如..

据我所知,只允许放1个破折号或{1}} 没有限制或没有(-)?的任何数字 一个点或没有(\d+)?

为什么允许放置(\.)?甚至..

http://www.regextester.com/

中完成测试

3 个答案:

答案 0 :(得分:5)

[^\s]表示任何不是空白的内容。这包括点。尝试匹配..会让你:

  1. [^\s]匹配.
  2. (-)?不匹配
  3. (\d+)?不匹配
  4. (\.)?匹配.
  5. (\d+)?不匹配
  6. <小时/> 我假设你想匹配数字(可能是负数/浮点数):

    ^-?\d+(\.\d+)?$
    

答案 1 :(得分:3)

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

使用RegexBuddy

创建

答案 2 :(得分:1)

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

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

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

demo。这不会让初始捕获组中的任何.

您可以使用前瞻只将第一个字符禁止为点:

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

请参阅another demo

所有解释均可在在线正则表达式测试人员处获得:

enter image description here

为了匹配您期望的格式的数字,请使用

^(?:[-]?\d+\.?\d*|-)$

人类可读的解释:

  • ^ - 字符串的开头,然后有2个替代方案......
  • [-]? - 可选连字符
  • \d+ - 一位或多位
  • \.? - 可选点
  • \d* - 0位或以上
  • | - 或 -
  • - - 连字符
  • $ - 字符串结尾

请参阅demo