正则篇

作者: kakaka0234 | 来源:发表于2018-03-01 21:26 被阅读0次

    commit <first 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"]
    
    
    

    相关文章

      网友评论

        本文标题:正则篇

        本文链接:https://www.haomeiwen.com/subject/rlwnxftx.html