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"]
网友评论