+: group-start ( i raw -- n/f )
+ [ CHAR: ( -rot index-from ] keep 2dup
+ { [ drop ] [ [ 1 + ] dip ?nth CHAR: ? = ] } 2&&
+ [ [ 1 + ] dip group-start ] [ drop ] if ;
+
+: nth-group-start ( n raw -- n )
+ [ -1 ] 2dip '[ dup [ 1 + _ group-start ] when ] times ;
+
+: nth-group ( n raw -- before nth )
+ [ nth-group-start ] keep swap cut CHAR: ) over index 1 + head ;