定期表达1.1,2。-1,2.3.30等模式

时间:2017-06-11 07:55:33

标签: javascript regex

我正在寻找一个符合以下规则的正则表达式(在javascript中使用),

  1. 它由0个或更多部分组成
  2. 每个部分都是一个数字。如果它是正面的,它就像123.如果是否定的,它就像-123
  3. 部件用点(。)
  4. 连接/分开

    /^(-?[0-9]*\.?)*$/g就是我所拥有的,但它与1.1-1之类的东西相匹配,这被认为是非法的。

    e.g。那些被认为是合法的 1,1.1,1.-3,1。-3.-4.5

    e.g。被认为是非法的 1.1-1

2 个答案:

答案 0 :(得分:1)

目前还不清楚你是否想要匹配不正确的字符串“1.1-1”的子部分,但如果你是,那么这应该能让你得到你想要的东西。

基本上,我复制了第一个匹配子组,并使后续子组可选?

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

如果您想匹配任何格式错误的行的第一部分,请参阅以下内容:

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

这是Regexer sketch

答案 1 :(得分:0)

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

^          : start
-?         : '-' (optional)
\d+        : digits (at least one)
(\.-?\d+)* : you can make it a non-capturing group if you want (?:\.-?\d+)*
    \.     : '.'
    -?     : '-' (optional)
    \d+    : digits (at least one)
    *      : match this group one or more times
$          : end

在开始时查找有效号码^-?\d+),然后查找 a .后跟有效号码,匹配为尽可能多((\.-?\d+)*)。

示例:



var tests = "1,-1,-1.-33,1.-4.-5.7,.1,1.,-1-1,1.5-7-8,1..1".split(','),
    regex = /^-?\d+(\.-?\d+)*$/;
    
tests.forEach(function(t) {
  console.log(t, " ===> ", regex.test(t));
});




Regex101 example