在/^.*x/.exec(" abcdxsdx")中究竟发生了什么

时间:2015-12-02 04:17:46

标签: javascript regex

问题对我来说太具体了,无法在论坛中找到。我的控制台记录" abcxdex",匹配整个字符串。我感到困惑,因为对我来说,这意味着从一开始就开始,我们会寻找。+或者如果。不存在也没关系。我对这个东西不熟悉,但是我辩论的两种方式显然都是错误的(或者看x的字符2,或者忘记^部分并将字符2中的表达式视为/ x /,因为任何我认为*意味着它所绑定的角色可以发生在0到无限次之间。所以在发现不存在之后,如果^被强制要求下一个角色必须是x。请用你的话解释什么是这个表达式的方法实际上是在做。

1 个答案:

答案 0 :(得分:2)

  

我认为*意味着它所绑定的角色可以从0到无限次发生。所以之后。发现不存在,下一个字符需要是x,如果^是强制的

.在正则表达式中具有特殊含义。它匹配任何字符(期望换行符)。

^也有特殊含义。这意味着表达式必须在字符串的开头匹配。

*等量词是贪心。他们尝试尽可能多地匹配很多,即尽可能多的重复。

因此,^.*x表示:从字符串的开头,匹配尽可能多的字符,然后是x

这些大致是步骤:

  1. 匹配^

    abcxdex
    ^
    

    这很简单,因为每个字符串都有一个开头。

  2. 匹配.*

    abcxdex
           ^
    

    同样简单,因为.*匹配所有内容。

  3. 匹配x

    不匹配!没有可匹配的字符。我们需要回过头来让量词匹配得更少。

  4. 匹配.*

    abcxdex
          ^
    

    匹配子字符串abcxde

  5. 匹配x

    abcxdex
           ^
    

    这次比赛成功。

  6. 完成。表达式中没有任何内容可供匹配。

  7. 网上有很多关于正则表达式的资源: