commit <first commit>
~ 5acc8a29
背景
先放一段尤大一段正則在這里溺森。不知各位看官能否看的明白启上。
var KEY_RE = /^[^\|<]+/,
ARG_RE = /([^:]+):(.+)$/,
FILTERS_RE = /\|[^\|<]+/g,
FILTER_TOKEN_RE = /[^\s']+|'[^']+'/g,
DEPS_RE = /<[^<\|]+/g,
NESTING_RE = /^\^+/
原因
在看指令那一塊的代碼是尤大寫的幾個正則總是看不懂。在網(wǎng)上查了一圈也沒找到原因吗货。 就是[^\|<]
這種正則刘急。但是當(dāng)時借助其他方式也完成的代碼邏輯函荣,就沒有去管。
直到有一天終于受不了了扳肛。每次看到這一段總感覺如鯁在喉。于是乎又去查了一番乘碑。終于找到了答案挖息。
答案
以var KEY_RE = /^[^\|<]+/
為例,最疑惑的地方就是[^\|<]
這種寫法兽肤。
^
字符
-
^
這個字符大家都很熟悉了套腹。幾乎所有的解釋都像下面這種。匹配輸入的開始资铡。如果多行標(biāo)志被設(shè)置為true电禀,那么也匹配換行符后緊跟的位置。 例如笤休,/^A/ 并不會匹配 "an A" 中的 'A'尖飞,但是會匹配 "An E" 中的 'A'。 當(dāng) '^' 作為第一個字符出現(xiàn)在一個字符集合模式時店雅,它將會有不同的含義政基。補(bǔ)充字符集合 一節(jié)有詳細(xì)介紹和示例。
-
但是在
[]
內(nèi)的時候^
就有了另一個解釋闹啦。叫脫字符(^)如果方括號內(nèi)的第一個字符是[^]沮明,則表示除了字符類之中的字符,其他字符都可以匹配窍奋。比如荐健,[^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"]