回答編集履歴
1
ソース修正
answer
CHANGED
@@ -7,4 +7,15 @@
|
|
7
7
|
const regex = /aaa(([^)]+))/g;
|
8
8
|
const found = Array.from(paragraph.matchAll(regex), m => m[1]);
|
9
9
|
```
|
10
|
-
な感じかのう ➡ [サンプル](https://codepen.io/i8086x/pen/GREXWXa?editors=0012)
|
10
|
+
な感じかのう ➡ [サンプル](https://codepen.io/i8086x/pen/GREXWXa?editors=0012)
|
11
|
+
|
12
|
+
**追記:**
|
13
|
+
|
14
|
+
**最短マッチ** を使う方法もあるで。上のコードでは、`/aaa(([^)]+))/g` としていて、これの中にある `[^)]+` は、「`)`ではない文字の1つ以上の連続」を表して、この「`)`ではない文字」という指定をせずに、単に、
|
15
|
+
`/aaa((.+))/g` だと、`aaa(` と `)` に囲まれた文字は何でもよく、つまり `)`でもよいことになります。これに加えて、`+` や `*` はなるべく長い部分でマッチさせるので、`paragraph` に含まれる、最後の`)`でマッチすることになり、対になる`)`までの部分とマッチしてくれへんのや。そこでどうするかゆうたら、`+` や `*` の後に `?` を付けると、なるべく短くマッチしてくれるようになるねん。
|
16
|
+
|
17
|
+
つまり、こないな正規表現
|
18
|
+
```javascript
|
19
|
+
const regex = /aaa((.+?))/g;
|
20
|
+
```
|
21
|
+
にしても、うまくいくで ➡ [サンプル](https://codepen.io/i8086x/pen/zYzJWwY?editors=0012)
|