Javascript 使用已存在的Reqular表达式添加另一个条件

Javascript 使用已存在的Reqular表达式添加另一个条件,javascript,Javascript,我只是尝试构建一个正则表达式,以允许负和非负整数值。它工作得很好 var regex = new RegExp('^[-]?\\d+$'); 但是现在我很困惑,我添加了另外两个约束,那就是允许小写的a,总数字应该小于或等于2,大于或等于1。有谁能帮我做到这一点吗 首先,在JavaScript中,通常最好使用正则表达式的文本形式而不是字符串,因为不必进行双重转义。这就不那么令人困惑了 因此,您的文字rex是: var regex = /^[-]?\d+$/; 在添加条件之前:字符类[-]是无意

我只是尝试构建一个正则表达式,以允许负和非负整数值。它工作得很好

var regex = new RegExp('^[-]?\\d+$');
但是现在我很困惑,我添加了另外两个约束,那就是允许小写的
a
,总数字应该小于或等于
2
,大于或等于
1
。有谁能帮我做到这一点吗


首先,在JavaScript中,通常最好使用正则表达式的文本形式而不是字符串,因为不必进行双重转义。这就不那么令人困惑了

因此,您的文字rex是:

var regex = /^[-]?\d+$/;
在添加条件之前:字符类
[-]
是无意义的,您只需匹配一个字符
-

var regex = /^-?\d+$/;
// Here ------^
您说过要在其中允许
a
,因此需要一个字符类:

var regex = /^-?[a\d]+$/;
// Here --------^^^^^
您说过希望长度为1-2个字符。我假设它不包括可选的
-
,因此您需要一个不同的量词:

var regex = /^-?[a\d]{1,2}$/;
// Here -------------^^^^^
下面是正则表达式的详细解释:

  • ^
    在字符串开头断言位置

  • -?
    逐字匹配字符
    -

    • 量词:在零到一次之间,尽可能多的次数,根据需要回馈[贪婪]
  • [a\d]{1,2}
    匹配下表中的单个字符

    • 量词:在1到2次之间,尽可能多的次数,根据需要回馈[贪婪]

    • a
      文字字符a(区分大小写)

    • \d
      匹配数字[0-9]

  • $
    在字符串末尾断言位置


以下是您的评论:

如何将其更改为接受a或数字,这意味着不能同时接受两者。包括-符号,其长度应小于2

你是说
-a
是有效输入,
aa
是有效输入,但不是
-aa
(因为太长了)

因为您需要根据是否存在
-
应用不同的量词,所以最好使用一个替代(
|
):

我们需要非捕获组(
(?:…)
),因为替换适用于最广泛的条件,我们希望
^
$
在替换之外

:

  • ^
    在字符串开头断言位置

  • (?:(?:-[a\d])|(?:[a\d]{1,2}))
    非捕获组

    • 第一种选择:
      (?:-[a\d])

      • (?:-[a\d])
        非捕获组

        • -
          逐字匹配字符
          -

        • [a\d]
          匹配下表中的单个字符

          • a
            文字字符
            a
            (区分大小写)

          • \d
            匹配一个数字
            [0-9]

    • 第二种选择:
      (?:[a\d]{1,2})

      • (?:[a\d]{1,2})
        非捕获组

        • [a\d]{1,2}
          匹配下表中的单个字符

          • 量词:在1到2次之间,尽可能多的次数,根据需要回馈[贪婪]

          • a
            文字字符
            a
            (区分大小写)

          • \d
            匹配一个数字
            [0-9]

  • $
    在字符串末尾断言位置


+1对于如此详细的解释,我如何将其更改为接受
a
number
,这意味着不能同时接受两者。包括
-
符号,其长度应小于2。谢谢你的时间。@RajaprabhuAravindasamy:我想你需要一个替代品,见上面的更新。另外,我之前错过了
[-]
这件事,character类什么都不做,只需使用
-
(上面也更新了)。我想这会让你走对路。最好的,谢谢你的信息。谢谢
var regex = /^(?:(?:-[a\d])|(?:[a\d]{1,2}))$/