回答編集履歴

2

よく考えたらジェネレータ内でforループ使っても質問の条件を満たさないのでは、と思ったので追記

2021/12/16 01:16

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36898

test CHANGED
@@ -89,3 +89,57 @@
89
89
  // [/abc/]
90
90
 
91
91
  ```
92
+
93
+
94
+
95
+ ---
96
+
97
+
98
+
99
+ # よく考えたらジェネレータ内でforループ使っても質問の条件を満たさないのでは、と思ったので追記
100
+
101
+
102
+
103
+ ジェネレータ移譲再帰で。
104
+
105
+
106
+
107
+ ```js
108
+
109
+
110
+
111
+ const arr = [
112
+
113
+ /abcde/,
114
+
115
+ /abc/,
116
+
117
+ /ab/,
118
+
119
+ ];
120
+
121
+ const str = "abc";
122
+
123
+
124
+
125
+ [...(function* g(arr, str) {
126
+
127
+ const x = arr.next().value
128
+
129
+ if (x.test(str)) {
130
+
131
+ yield x;
132
+
133
+ return;
134
+
135
+ }
136
+
137
+ yield* g(arr, str);
138
+
139
+ })(arr.values(), str)]
140
+
141
+
142
+
143
+ // [/abc/]
144
+
145
+ ```

1

コメントを受けて追記

2021/12/16 01:16

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36898

test CHANGED
@@ -41,3 +41,51 @@
41
41
 
42
42
 
43
43
  ```
44
+
45
+
46
+
47
+ ---
48
+
49
+
50
+
51
+ # コメントを受けて追記
52
+
53
+
54
+
55
+ ```js
56
+
57
+ const arr = [
58
+
59
+ /abcde/,
60
+
61
+ /abc/,
62
+
63
+ /ab/,
64
+
65
+ ];
66
+
67
+ const str = "abc";
68
+
69
+
70
+
71
+ [...(function* (arr, str) {
72
+
73
+ for (x of arr) {
74
+
75
+ if (x.test(str)) {
76
+
77
+ yield x;
78
+
79
+ return;
80
+
81
+ }
82
+
83
+ }
84
+
85
+ })(arr, str)]
86
+
87
+
88
+
89
+ // [/abc/]
90
+
91
+ ```