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

回答編集履歴

1

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

2018/11/04 15:12

投稿

think49
think49

スコア18194

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