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
匹配数字[0-9]\d
在字符串末尾断言位置$
以下是您的评论: 如何将其更改为接受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]
- 第一种选择:
在字符串末尾断言位置$
a
或number
,这意味着不能同时接受两者。包括-
符号,其长度应小于2。谢谢你的时间。@RajaprabhuAravindasamy:我想你需要一个替代品,见上面的更新。另外,我之前错过了[-]
这件事,character类什么都不做,只需使用-
(上面也更新了)。我想这会让你走对路。最好的,谢谢你的信息。谢谢
var regex = /^(?:(?:-[a\d])|(?:[a\d]{1,2}))$/