回答編集履歴

1

入れ子回数が無制限のコードを追記

2018/11/04 15:12

投稿

think49
think49

スコア18189

test CHANGED
@@ -1,10 +1,46 @@
1
- 未検証。
1
+ ### 入れ子回数が1回
2
+
3
+
4
+
5
+ 入れ子回数が1回限定なら、`[]` の中で `[]` を消費するパターンを作れば良いでしょう。
2
6
 
3
7
 
4
8
 
5
9
  ```JavaScript
6
10
 
11
+ console.log(/[[^[]]*(?:[[^]]*][^[]]*)*]/g.exec('aaa[ソード[炎属性]][ツインソード][ソード[水属性]]ccc')[0]); // "[ソード[炎属性]]"
12
+
13
+ ```
14
+
15
+
16
+
17
+ ### 入れ子回数が無制限
18
+
19
+
20
+
21
+ 入れ子が無制限の場合は、
22
+
23
+
24
+
25
+ - `[`
26
+
27
+ - `]`
28
+
29
+ - `[]` 以外の文字列
30
+
31
+
32
+
7
- /[[^[]]*(?:[[^]]*][^[]]*)*]/
33
+ の3つに分けてマッチさせ、入れ子深度を計測しながら、文字列にマッチさせる必要があります。
34
+
35
+
36
+
37
+ - [match-all-character-pair.js: 検索対象文字列から、指定した「開始文字」「終了文字」の対応範囲となる文字列を検索し、配列で返します](https://gist.github.com/think49/071350bcc987d82dd836885ea6f5c0d4)
38
+
39
+
40
+
41
+ ```JavaScript
42
+
43
+ matchAllCharacterPair('[a][[b]][[[c]]]', '[', ']'); // ["[a]","[[b]]","[[[c]]]"]
8
44
 
9
45
  ```
10
46