【发布时间】:2008-11-09 05:04:16
【问题描述】:
var pattern = /^0+$/;
我的猜测是这样的:
“查看字符串的开头和结尾,如果开头和结尾有一个或多个零的模式,则返回该模式。”
不过,我确定这是错误的,因为当我使用此字符串运行表达式时:
var string = "0000009000000";
出现null。
那么它到底在说什么?当我问的时候,JavaScript 是如何考虑字符串的开头、中间和结尾的?
更新 #1: 感谢您的回复!我想我现在明白了。我的困惑源于我将字符串可视化为具有开头、中间和结尾的事实。像这样:
[开始][中间][结束]
换句话说,对于上面给定的字符串,以下表达式按我的预期工作:
/^0+/; 返回“000000”(字符串开头有一个或多个零的模式)
和
/0+$/;返回“000000”(字符串末尾有一个或多个零的模式)
更新 #2:我对这一点的所有回复都投了赞成票,因为它们都很有帮助,我将这些答案汇总成一个重要的答案:
给定以下 JavaScript 代码:
var string = "0000009000000";
var regExp = /^0+$/;
alert(regExp.exec(string));
部分内容如下:
"如果正则表达式中 ^ 修饰符和 $ 修饰符前面的确切字符不是同时位于字符串的第一个位置和字符串的最后一个位置(即,它们不是字符串中唯一的字符),然后返回 null。否则,返回字符。”
换句话说,假设给定的字符串是六个零“000000”。这会导致匹配,因为完全相同的“0”字符组位于第一个位置(1st 2nd 3rd 4th 5th 6th)和最后一个位置(1st 2nd 3rd 4th 5th字符串的第 6 个)。
但是,在原始给定字符串中,有六个零,然后是一个九,然后是六个零(“0000009000000”)。现在,字符串第一个位置的六个零 (1st, 2nd, 3rd, 4th, 5th, 6th) 与字符串最后位置的六个零 (8th, 9th, 10th, 11th, 12th) 不完全相同,第 13 次)。因此,会返回一个null。
【问题讨论】:
-
回复:更新 2. 想太多了。该表达式仅表示“匹配字符串的开头,后跟 1 个或多个 0,然后是字符串的结尾”。不要将 ^ 和 $ 视为位置,而应将其视为(不存在的)开始字符和终止符的匹配器。
-
也许……但问这个问题让我意识到仅仅知道定义是不够的——我需要“深入了解”并了解定义的原因——这是算法我追! :)
标签: javascript regex