正则表达式 - 字符前后空字符串的文档

时间:2015-10-14 17:34:18

标签: javascript regex

对此问题的回答:https://softwareengineering.stackexchange.com/questions/291273/why-regex-when-using-global-search-and-0-quantifier-match-the-end-of-the-stRegular expression to match a line that doesn't contain a word?

我不知道每个字母前后空字符串的解释。我第一次听到这个。我还能在哪里读到它,因为我现在有点困惑,而且找不到任何其他来源。

1 个答案:

答案 0 :(得分:4)

在匹配正则表达式时,解释器首先尝试在字符串中的索引0处进行匹配。

  • 如果没有匹配,则进入下一个索引并再次尝试。
  • 如果匹配,则返回该匹配,然后在匹配结束时再次尝试匹配 。如果最后一个匹配与空字符串匹配,则它前进到下一个字符。

依此类推,每场比赛(匹配时)或每个角色(当没有匹配时)。

正则表达式d*中的问题是它接受空匹配 - 这意味着空字符串与模式匹配。这意味着您总是获得匹配。

让我们尝试d*字符串上的dddxdddd模式:

这是最初的位置:

dddxdddd     matches: []
^

^实际上意味着光标是之前第一个d。您应该将光标视为字符串中的两个字符之间。这有助于您了解匹配过程。

所以,让我们插入虚构的空格来说明:

 d d d x d d d d     matches: []
^

我们在这里得到第一个匹配,因为第一个字符是d

dddxdddd
\_/

比赛结束后,我们将光标放在匹配结束的位置dx之间:

 d d d x d d d d     matches: ["ddd"]
      ^

我们再次尝试匹配。匹配成功,dx之间的空字符串。当我们得到一个空的匹配时,我们前进光标:

 d d d x d d d d     matches: ["ddd", ""]
        ^

然后我们再次尝试匹配,我们得到dddd子字符串:

dddxdddd
    \__/

我们把光标放在它后面:

 d d d x d d d d     matches: ["ddd", "", "dddd"]
                ^

现在它位于最后d和字符串结尾之间。同样,我们尝试匹配,我们用空字符串成功:

 d d d x d d d d     matches: ["ddd", "", "dddd", ""]
                  ^

如果我们尝试推进光标,它现在将超过字符串的末尾,这意味着我们已找到所有匹配项并且我们已完成。

最终结果:

["ddd", "", "dddd", ""]