回答編集履歴

3

解決

2017/08/27 13:18

投稿

ponsea
ponsea

スコア15

test CHANGED
@@ -79,3 +79,31 @@
79
79
 
80
80
 
81
81
  正規表現苦手だ。。。。
82
+
83
+
84
+
85
+ 追記:
86
+
87
+ ()の入れ子には対応できませんでしたが、今回は問題なさそうなので、これで行きます。
88
+
89
+ ありがとうございました。
90
+
91
+ ```TypeScript
92
+
93
+ function splitByBadge(subject: string): string[] {
94
+
95
+ return subject.replace(/(\[.\])/g, '\\$1')
96
+
97
+ .replace(/\([^)]*\\[^(]*\)/g, match => match.replace(/\\/g, ''))
98
+
99
+ .replace(/\]\\\[/g, '][')
100
+
101
+ .split('\\')
102
+
103
+ .splice(1)
104
+
105
+ .map(s => s.trim());
106
+
107
+ }
108
+
109
+ ```

2

ミスってた

2017/08/27 13:17

投稿

ponsea
ponsea

スコア15

test CHANGED
@@ -65,3 +65,17 @@
65
65
 
66
66
 
67
67
  もっと洗練されたやり方や、まずい点があったら教えてください...!!
68
+
69
+
70
+
71
+ 追記:
72
+
73
+ 誤りがありました。
74
+
75
+ .replace(/\([^)]*\\[^)]*\)/g, match => match.replace(/\\/g, ''))
76
+
77
+ が、"[a] aiueo(aaa(aaa) [b] xyz)"という場合に、[b]を分割してしまう。。。
78
+
79
+
80
+
81
+ 正規表現苦手だ。。。。

1

しくってた。

2017/08/27 10:00

投稿

ponsea
ponsea

スコア15

test CHANGED
@@ -27,3 +27,41 @@
27
27
 
28
28
 
29
29
  もっと洗練されたやり方や、まずい点があったら教えてください...!!
30
+
31
+
32
+
33
+ 追記:
34
+
35
+ 誤りがありました。
36
+
37
+ .replace(/\(.*\\.*\)/g, match => match.replace(/\\/g, ''))
38
+
39
+ が、"[a] aiueo(aiueo) [b] xxxxx(ddd)"という場合に、[b]の分割を抹消してしまってた.
40
+
41
+
42
+
43
+ 訂正後:
44
+
45
+ ```TypeScript
46
+
47
+ function splitByBadge(subject: string): string[] {
48
+
49
+ return subject.replace(/(\[.\])/g, '\\$1') // 区切りの前に印(\)を付ける
50
+
51
+ .replace(/\([^)]*\\[^)]*\)/g, match => match.replace(/\\/g, '')) // カッコ内にある\は消去して置換
52
+
53
+ // ↑変更
54
+
55
+ .replace(/\]\\\[/g, '][') // 連続している場合はまとめる
56
+
57
+ .split('\\') // \で分割
58
+
59
+ .splice(1); // 先頭の余分な分割を消す
60
+
61
+ }
62
+
63
+ ```
64
+
65
+
66
+
67
+ もっと洗練されたやり方や、まずい点があったら教えてください...!!