/((\w)\2)/
找到重复的字母。我希望避免通过忽略匹配第二个捕获组的字母而产生的二维数组:/((?:\w)\2)/
。似乎这是不可能的。有什么想法吗?
答案 0 :(得分:1)
您不需要任何捕获组:
str = [*'a+'..'z+', *'A+'..'Z+', *'0+'..'9+', '_+'].join('|')
#=> "a+|b+| ... |z+|A+|B+| ... |Z+|0+|1+| ... |9+|_+"
"aaabbcddd".scan(/#{str}/)
#=> ["aaa", "bb", "c", "ddd"]
但如果你坚持要有一个:
"aaabbcddd".scan(/(#{str})/).flatten(1)
#=> ["aaa", "bb", "c", "ddd"]
这是作弊吗?你确实问过它是否可能。
答案 1 :(得分:0)
如果您的意思是使用String#scan
,则可以对结果进行后处理以仅返回第一项Enumerable#map
:
'helloo'.scan(/((\w)\2)/)
# => [["ll", "l"], ["oo", "o"]]
'helloo'.scan(/((\w)\2)/).map { |m| m[0] }
# => ["ll", "oo"]