>> "aaaaaafbfbfsjjseew".scan(/(.)/)
=> [["a"], ["a"], ["a"], ["a"], ["a"], ["a"], ["f"], ["b"], ["f"], ["b"], ["f"], ["s"], ["j"], ["j"], ["s"], ["e"], ["e"], ["w"]]
>> "aaaaaafbfbfsjjseew".scan(/((.))/)
=> [["a", "a"], ["a", "a"], ["a", "a"], ["a", "a"], ["a", "a"], ["a", "a"], ["f", "f"], ["b", "b"], ["f", "f"], ["b", "b"], ["f", "f"], ["s", "s"], ["j", "j"], ["j", "j"], ["s", "s"], ["e", "e"], ["e", "e"], ["w", "w"]]
>> "aaaaaafbfbfsjjseew".scan(/((.)\2*)/)
=> [["aaaaaa", "a"], ["f", "f"], ["b", "b"], ["f", "f"], ["b", "b"], ["f", "f"], ["s", "s"], ["jj", "j"], ["s", "s"], ["ee", "e"], ["w", "w"]]
>> "aaaaaafbfbfsjjseew".scan(/((.)\1*)/)
=> [["a", "a"], ["a", "a"], ["a", "a"], ["a", "a"], ["a", "a"], ["a", "a"], ["f", "f"], ["b", "b"], ["f", "f"], ["b", "b"], ["f", "f"], ["s", "s"], ["j", "j"], ["j", "j"], ["s", "s"], ["e", "e"], ["e", "e"], ["w", "w"]]
>> "aaaaaafbfbfsjjseew".scan(/((.)\3*)/)
=> [["a", "a"], ["a", "a"], ["a", "a"], ["a", "a"], ["a", "a"], ["a", "a"], ["f", "f"], ["b", "b"], ["f", "f"], ["b", "b"], ["f", "f"], ["s", "s"], ["j", "j"], ["j", "j"], ["s", "s"], ["e", "e"], ["e", "e"], ["w", "w"]]
答案 0 :(得分:8)
来自fine manual:
str.scan(模式)→数组
[...]
如果模式包含组,则每个单独的结果本身就是一个包含每个组一个条目的数组。
这一个:
"aaaaaafbfbfsjjseew".scan(/(.)/)
有一个组,所以你得到一个数组数组:每个单独的结果是一个单独的元素数组。
下一个:
"aaaaaafbfbfsjjseew".scan(/((.))/)
有两个碰巧具有相同值的组,因此您在单个结果数组中得到两个相同的元素。
第三个:
"aaaaaafbfbfsjjseew".scan(/((.)\2*)/)
再次包含两个组,但也包含对内部组的反向引用,因此外部组(第一组中的AKA)吞噬重复项,并获得["aaaaaa", "a"]
,["jj", "j"]
和{{1 }}
第四个:
["ee", "e"]
只是尝试将后引用切换到外部组,但{1}未在组1中定义,因此它等同于"aaaaaafbfbfsjjseew".scan(/((.)\1*)/)
。
第五个:
\1
尝试引用一个不存在的组(当只有两个组时组3),因此它的行为与/((.))/
相同。
答案 1 :(得分:0)
"aaaaaafbfbfsjjseew".scan(/(.)/)
表示字符串可以拆分为单独的字符串数组。
这里的括号表示它是一个数组,括号中的.
- 符号表示该单个数组字符串中的字符数。
如果我们为假设"hellovenkat".scan(/(...)/)
而写,则会产生结果
[["hel"],["lov"],["enk"]]
。它不提供最后一个索引,因为它不能包含三个字符。
如果我们提供"hello venkat".scan(/(...)/)
,结果如下。
答:[["hel"], ["lo "], ["ven"], ["kat"]]
。