试图让正则表达式匹配范围

时间:2014-01-01 10:10:35

标签: javascript regex

到目前为止,我有^(\d.*[.]?\d*)|([<>][=]?\d.*[.]?\d*)|(\d.*[.]?\d*[-]\d.*[.]?\d*)$但我的测试得到了:

应该匹配:(全部都是)

>1
<9
>=99
<=123123.134
1-2
44.421-234.123
123
123.123
0.123

不匹配:(标有*的示例在不应该匹配的情况下匹配)

123.      *
.123
=<123     *
=>234     *
sdf
sdf.sdf
123.sdf   *

示例here

2 个答案:

答案 0 :(得分:3)

你可以使用这样的东西:

^(?:[<>]?=?\d+(?:\.\d+)?|\d+(?:\.\d+)?-\d+(?:\.\d+)?)$

我相信您已经知道主播^$如何运作。

(?: ... )是一个非捕获组,它与捕获组( ... )相同,只是它没有“保存”匹配的部分。当与( ... )相比时,如果你真的不需要匹配的部分并且想要提高效率,这会特别有用,这需要一点点开销来存储额外的数据。

[<>]?=?适用于潜在的比较器。

\d+(?:\.\d+)?用于数字,整数或浮动,并确保不存在123..123这样的内容,因为我们在+上使用\d量词{1}}。

因此正则表达式匹配比较器后跟一个数字,或两个数字之间的减法:

\d+(?:\.\d+)?-\d+(?:\.\d+)?
+-----------+|+-----------+
   1st num   |   2nd num
         minus sign

regex101 demo

答案 1 :(得分:0)

您可以使用:

^(?:[<>]=?|\d+(?:.\d+)?-)?\d+(?:.\d+)?$