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

回答編集履歴

3

解決

2017/08/27 13:18

投稿

ponsea
ponsea

スコア15

answer CHANGED
@@ -38,4 +38,18 @@
38
38
  .replace(/\([^)]*\\[^)]*\)/g, match => match.replace(/\\/g, ''))
39
39
  が、"[a] aiueo(aaa(aaa) [b] xyz)"という場合に、[b]を分割してしまう。。。
40
40
 
41
- 正規表現苦手だ。。。。
41
+ 正規表現苦手だ。。。。
42
+
43
+ 追記:
44
+ ()の入れ子には対応できませんでしたが、今回は問題なさそうなので、これで行きます。
45
+ ありがとうございました。
46
+ ```TypeScript
47
+ function splitByBadge(subject: string): string[] {
48
+ return subject.replace(/(\[.\])/g, '\\$1')
49
+ .replace(/\([^)]*\\[^(]*\)/g, match => match.replace(/\\/g, ''))
50
+ .replace(/\]\\\[/g, '][')
51
+ .split('\\')
52
+ .splice(1)
53
+ .map(s => s.trim());
54
+ }
55
+ ```

2

ミスってた

2017/08/27 13:17

投稿

ponsea
ponsea

スコア15

answer CHANGED
@@ -31,4 +31,11 @@
31
31
  }
32
32
  ```
33
33
 
34
- もっと洗練されたやり方や、まずい点があったら教えてください...!!
34
+ もっと洗練されたやり方や、まずい点があったら教えてください...!!
35
+
36
+ 追記:
37
+ 誤りがありました。
38
+ .replace(/\([^)]*\\[^)]*\)/g, match => match.replace(/\\/g, ''))
39
+ が、"[a] aiueo(aaa(aaa) [b] xyz)"という場合に、[b]を分割してしまう。。。
40
+
41
+ 正規表現苦手だ。。。。

1

しくってた。

2017/08/27 10:00

投稿

ponsea
ponsea

スコア15

answer CHANGED
@@ -12,4 +12,23 @@
12
12
  }
13
13
  ```
14
14
 
15
+ もっと洗練されたやり方や、まずい点があったら教えてください...!!
16
+
17
+ 追記:
18
+ 誤りがありました。
19
+ .replace(/\(.*\\.*\)/g, match => match.replace(/\\/g, ''))
20
+ が、"[a] aiueo(aiueo) [b] xxxxx(ddd)"という場合に、[b]の分割を抹消してしまってた.
21
+
22
+ 訂正後:
23
+ ```TypeScript
24
+ function splitByBadge(subject: string): string[] {
25
+ return subject.replace(/(\[.\])/g, '\\$1') // 区切りの前に印(\)を付ける
26
+ .replace(/\([^)]*\\[^)]*\)/g, match => match.replace(/\\/g, '')) // カッコ内にある\は消去して置換
27
+ // ↑変更
28
+ .replace(/\]\\\[/g, '][') // 連続している場合はまとめる
29
+ .split('\\') // \で分割
30
+ .splice(1); // 先頭の余分な分割を消す
31
+ }
32
+ ```
33
+
15
34
  もっと洗練されたやり方や、まずい点があったら教えてください...!!