var re = /^\[*:*\]*/;
alert(re.test("aa"));
始终警告true(在任何字符串上)。我究竟做错了什么?我需要检查字符串开头是否有类似[445:123]的内容。
答案 0 :(得分:5)
你的正则表达式意味着
[
个字符...... :
个字符...... ]
个字符。字符串“aa”与之匹配。你可能想要这样的东西:
var re = /^\[\d+:\d+\]/;
+
量词表示“一个或多个”,而*
表示“零或更多”。 \d
转义意味着“任何数字”。
*编辑 - 如果正则表达式需要匹配
之类的东西[12:2:17:419]
同样,那就是
var re = /^\[\d+(:\d+)+\]/;
答案 1 :(得分:1)
您正在检查任意数量的[
,后跟任意数量的:
,后跟任意数量的]
。请注意,这是任何号码 - 其中任何一个出现的都是有效的结果。
听起来你的意思更像是var re= /^\[\d+:\d+\]/;
答案 2 :(得分:0)
在正则表达式中,*
并不表示通配符匹配,它表示前一个令牌中的零个或多个。要匹配任何字符,请改用.
。你想要匹配的正则表达式更像是......
/^\[.*:.*\].*/
但更好的是更具体,使用\d
匹配小数,并使用+
匹配前一个标记中的一个或多个,并在匹配后删除错误的字符... < / p>
/^\[\d+:\d+\]/