正则篇

commit ~ 5acc8a29

背景

先放一段尤大一段正则在这里。不知各位看官能否看的明白。

var KEY_RE          = /^[^\|<]+/,
    ARG_RE          = /([^:]+):(.+)$/,
    FILTERS_RE      = /\|[^\|<]+/g,
    FILTER_TOKEN_RE = /[^\s']+|'[^']+'/g,
    DEPS_RE         = /<[^<\|]+/g,
    NESTING_RE      = /^\^+/

原因

在看指令那一块的代码是尤大写的几个正则总是看不懂。在网上查了一圈也没找到原因。 就是[^\|<]这种正则。但是当时借助其他方式也完成的代码逻辑,就没有去管。

直到有一天终于受不了了。每次看到这一段总感觉如鲠在喉。于是乎又去查了一番。终于找到了答案。

答案

var KEY_RE = /^[^\|<]+/为例,最疑惑的地方就是[^\|<]这种写法。

^ 字符

  • ^ 这个字符大家都很熟悉了。几乎所有的解释都像下面这种。

    匹配输入的开始。如果多行标志被设置为true,那么也匹配换行符后紧跟的位置。
    
    例如,/^A/ 并不会匹配 "an A" 中的 'A',但是会匹配 "An E" 中的 'A'。
    
    当 '^' 作为第一个字符出现在一个字符集合模式时,它将会有不同的含义。补充字符集合 一节有详细介绍和示例。
    
  • 但是在[]内的时候^就有了另一个解释。叫脱字符(^)

    如果方括号内的第一个字符是[^],则表示除了字符类之中的字符,其他字符都可以匹配。比如,[^xyz]表示除了x、y、z之外都可以匹配。
    
  • 所以此处的^的含义出匹配除了 \|< 这个以外的字符

\|< 字符

  • \|< 写在这里也是没有理解。其实很简单。 就是 \| filter符号和 < 依赖符号

综上

  • ^ 匹配输入的开始

  • [^\|<] 匹配非| ^这两个字符

  • + 匹配之前一个或多个满足匹配的字符

  • /^[^\|<]+/就是 在输入字符的开始,匹配不包含| ^字符的所有字符

如:

var ARG_RE = /^[^\|<]+/
'hello | kaka < haha'.match(ARG_RE)
// result = ["hello ", index: 0, input: "hello | kaka < haha"]

'he_llo:kaka < haha'.match(ARG_RE)
// result = ["he_llo:kaka ", index: 0, input: "he_llo:kaka < haha"]


你可能感兴趣的:(正则篇)