我只是尝试构造一个正则表达式,以允许负和非负整数值。它工作正常,
var regex = new RegExp('^[-]?\\d+$');
但现在我很难再添加两个约束,即允许使用小写a
,并且总数应小于或等于2
且大于或等于{{ 1}}。任何人都可以帮助我实现这一目标吗?
答案 0 :(得分: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
(因为它太长了)。
因为你需要根据-
是否存在来应用不同的量词,所以你可能最好选择交替(|
):
var regex = /^(?:(?:-[a\d])|(?:[a\d]{1,2}))$/
我们需要非捕获组((?:...)
),因为替换适用于最广泛的条件,我们希望^
和$
在交替之外。
^
在字符串
(?:(?:-[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]
$
断言字符串末尾的位置