Rak*_*esh -1 ruby regex string
>> "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"]]
Run Code Online (Sandbox Code Playgroud)
从精细手册:
str.scan(pattern)→array
[...]
如果模式包含组,则每个单独的结果本身就是一个数组,每个组包含一个条目.
这个:
"aaaaaafbfbfsjjseew".scan(/(.)/)
Run Code Online (Sandbox Code Playgroud)
有一个组,所以你得到一个数组数组:每个单独的结果是一个单独的元素数组.
下一个:
"aaaaaafbfbfsjjseew".scan(/((.))/)
Run Code Online (Sandbox Code Playgroud)
有两组碰巧具有相同的值,因此您在各个结果数组中得到两个相同的元素.
第三个:
"aaaaaafbfbfsjjseew".scan(/((.)\2*)/)
Run Code Online (Sandbox Code Playgroud)
又包含了两个组,但是也包含了向后引用内部组,以便外组(AKA第一组)狼吞虎咽重复和你["aaaaaa", "a"],["jj", "j"]和["ee", "e"].
第四个:
"aaaaaafbfbfsjjseew".scan(/((.)\1*)/)
Run Code Online (Sandbox Code Playgroud)
只是尝试将后引用切换到外部组,但未\1在组1中定义,因此它等效于/((.))/.
第五个:
"aaaaaafbfbfsjjseew".scan(/((.)\3*)/)
Run Code Online (Sandbox Code Playgroud)
试图引用一个不存在的组(当只有两个组时组3),因此它的行为与...相同/((.))/.