Javascript正则表达式总是返回true

时间:2013-10-22 00:00:27

标签: javascript regex

var re = /^\[*:*\]*/;
alert(re.test("aa"));

始终警告true(在任何字符串上)。我究竟做错了什么?我需要检查字符串开头是否有类似[445:123]的内容。

3 个答案:

答案 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+\]/