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

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

4

3 回答 3

5

你的正则表达式意味着

  • 在字符串的开头...
  • 可以有零个或多个[字符...
  • 然后零个或多个:字符...
  • 然后是零个或多个]字符。

字符串“aa”与之匹配。你可能想要这样的东西:

var re = /^\[\d+:\d+\]/;

+量词表示“一个或多个”,而表示*“零个或多个”。\d转义的意思是“任何数字”。

*edit - 如果正则表达式需要匹配类似的东西

[12:2:17:419]

同样,那将是

var re = /^\[\d+(:\d+)+\]/;
于 2013-10-22T00:02:37.943 回答
1

您正在检查任意数量的[,然后是任意数量的:,然后是任意数量的]。请注意,这是任何数字 - 其中任何一个出现 0 次都是有效结果。

听起来你的意思更像是var re= /^\[\d+:\d+\]/;

于 2013-10-22T00:03:00.160 回答
0

在正则表达式中,*不表示通配符匹配,它表示前一个标记的零个或多个。要匹配任何字符,请.改用。您想要匹配的正则表达式更像这样......

/^\[.*:.*\].*/

但更好的是更具体,\d用于匹配小数,+用于匹配前面的一个或多个token,匹配后去掉错误字符...

/^\[\d+:\d+\]/
于 2013-10-22T00:05:24.513 回答