teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ソース修正

2021/09/24 01:48

投稿

退会済みユーザー
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)