你怎么看这个JavaScript正则表达式?

时间:2008-11-09 05:04:16

标签: javascript regex string pattern-matching

var pattern = /^0+$/;

我猜是这样的:

“查看字符串的开头和结尾,如果在开头和结尾有一个或多个零的模式,则返回该模式。”

我确信这是错的,因为当我用这个字符串运行表达式时:

var string = "0000009000000";

出现null

那真正说的是什么?虽然我在问,JavaScript是什么/如何考虑字符串的开头,中间和结尾?

更新#1:感谢您的回复!我想我现在明白了。我的困惑源于我将字符串可视化为具有开头,中间和结尾的事实。像这样:

[开始] [中间] [end]的

换句话说,对于上面给定的字符串,以下表达式的工作方式与我期望的相同:

/^0+/;返回“000000”(字符串开头的一个或多个零的模式)

/0+$/;返回“000000”(字符串末尾的一个或多个零的模式)

更新#2:我对这一点的所有回复进行了投票,因为它们都很有帮助,我把答案编成了一个很棒的答案:

给出以下JavaScript代码:

var string = "0000009000000";
var regExp = /^0+$/; 
alert(regExp.exec(string));

它的部分内容如下:

“如果正则表达式中^修饰符后跟$修饰符后面的确切字符不是同时位于字符串的第一个位置和字符串的最后一个位置(即,它们不是字符串中唯一的字符),然后返回null。否则,返回字符。“

换句话说,假设给定的字符串是六个零“000000”。这导致匹配,因为完全相同的“0”字符组同时位于第一个位置(第1个第2个第3个第4个第5个第6个)和最后位置(第1个第2个第3个第4个第5个)第6个)字符串。

但是,在原始给定字符串中,有六个零,后跟一个九,然后是六个零(“0000009000000”)。现在,弦的第一个位置(第1,第2,第3,第4,第5,第6)中的六个零不是完全相同的六个零位于弦的最后位置(第8,第9,第10,第11,第12) ,13日)。因此,返回null

8 个答案:

答案 0 :(得分:10)

它说你的字符串只包含0 ...它必须开始,然后有1或更多0,然后结束。

答案 1 :(得分:7)

^ 0 + $

  • 在字符串«^»
  • 的开头处断言位置
  • 将字符“0”字面匹配«0+»
    • 在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)«+»
  • 断言字符串末尾的位置(或在字符串末尾的换行符之前,如果有的话)«$»

答案 2 :(得分:2)

如果您希望它与您的字符串匹配,您希望正则表达式如下:

var pattern = /^0+.*0+$/

这将在开头匹配1个或多个'0',在结尾处匹配1个或多个'0',在中间匹配0个或更多个。

答案 3 :(得分:2)

至少一个 0 的模式,固定在一行的开头( ^ )和结尾( $ );换句话说,字符串由一个或多个零组成。

要匹配由数字0到9组成的字符串,并以至少一个零开始和结束,模式

/^0+[0-9]+0$/

可以工作,即匹配一个或多个零,然后匹配一个或多个数字0-9,以零结尾。

除非另有说明,否则JavaScript会将整个字符串视为一行,忽略换行符;要强制它考虑多个单独的行,请使用 m 修饰符,例如

/regex/m

另请参阅: JavaScript regular expression overview on Mozilla Developer Center

答案 4 :(得分:1)

回应您的更新 - 您说得对。正则表达式尝试匹配的字符串确实有一个开头,一个中间和一个结尾。

但你知道吗?所有字符串都有开头和结尾。

你的正则表达式说,字符串必须有一个开头,一个结尾,在两个之间,只有一串零。

不要将您的000000视为一开始,或将900000视为最后。 事实上,暂时忽略开始和结束的想法。

  • 这个正则表达式匹配“必须在某个地方有一些零”:/0+/
  • 此正则表达式匹配“必须在其中包含一些零而不包含任何其他内容/^0+$/

为什么我们要添加^和$?

因为“没有别的”没有正则表达式,所以我们必须指定“字符串的开头,一些零,字符串的结尾”,这就是同样的事情。

顺便说一下,你也错了:

  

如果在开头和结尾有一个或多个零的模式,则返回该模式

你的正则表达式不会返回“那个模式”,它只会返回true。你需要括号来掌握模式:/^(0+)$/

答案 5 :(得分:1)

@CodeCurious,你仍然让它变得比它需要的更复杂。正则表达式/^0+$/仅表示整个字符串由一个或多个零组成。正则表达式提供了大量混淆的机会,所以只要你能找到它就能接受简单。

答案 6 :(得分:0)

/(^0+|0+$)/

答案 7 :(得分:0)

我总是把我的正则表达式用于人类的话语,以确保它是我的意思。

这:^ 0 + $

如下所示:“如果从我的字符串的开头(^)开始,你会发现至少有一个(+)零(0),除了字符串的结尾($)之外别无其他。”

请记住,正则表达式基本上是一堆“If”语句。首先,它必须是“真实的”,然后它将返回最佳结果。正则表达式永远不会返回“有点真实”或“大多数真实”的结果。