回答編集履歴

7

テキスト修正

2018/11/13 03:38

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -155,3 +155,51 @@
155
155
 
156
156
 
157
157
  - [https://jsfiddle.net/jun68ykt/842x9gbe/1/](https://jsfiddle.net/jun68ykt/842x9gbe/1/)
158
+
159
+
160
+
161
+ #### 追記3
162
+
163
+
164
+
165
+ karamarimoさんからのコメント
166
+
167
+
168
+
169
+ > karamarimo 2018/11/13 12:24
170
+
171
+ > regex でマッチする部分をすべて見つけたいときは g フラグと regex.exec() を使えば、文字列を削除しなくてもできますよ。
172
+
173
+
174
+
175
+ にそって、 `regex.exec()` を使ってみたものが以下です。
176
+
177
+
178
+
179
+ ```javascript
180
+
181
+ const regexp = /[(\w+)](.+?)[/\1]/g;
182
+
183
+
184
+
185
+ const contents = [];
186
+
187
+
188
+
189
+ let m;
190
+
191
+
192
+
193
+ while( m = regexp.exec(text) ) {
194
+
195
+ contents.push(m[2]);
196
+
197
+ }
198
+
199
+
200
+
201
+ ```
202
+
203
+
204
+
205
+ **上記コードのサンプル:** [https://jsfiddle.net/jun68ykt/vz76fphe/2/](https://jsfiddle.net/jun68ykt/vz76fphe/2/)

6

テキスト修正

2018/11/13 03:38

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -121,3 +121,37 @@
121
121
 
122
122
 
123
123
  - [https://jsfiddle.net/jun68ykt/dvqy5m3o/1/](https://jsfiddle.net/jun68ykt/dvqy5m3o/1/)
124
+
125
+
126
+
127
+
128
+
129
+ #### 追記2
130
+
131
+
132
+
133
+ > "[tag1]AAA[xxx]BBB[/tag1][tag1]CCC DDD[/tag1]EEE[yyy][tag1][yyy]FFFF[/tag1]"
134
+
135
+ このような文字列の場合には、最初の[tag1]から行末の[/tag1]まですべてマッチしてしまいます。。
136
+
137
+ こちらについて、何か良い案ございますでしょうか?
138
+
139
+
140
+
141
+ についてですが、以下のように `(.+)` を[最短マッチ](https://www.google.co.jp/search?q=%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE+%E6%9C%80%E7%9F%AD%E3%83%9E%E3%83%83%E3%83%81&ie=UTF-8)の `(.+?)` に変更すればよいのではと思います。
142
+
143
+
144
+
145
+ ```
146
+
147
+ const regexp = /[(\w+)](.+?)[/\1]/;
148
+
149
+ ```
150
+
151
+
152
+
153
+ 以下は上記のサンプルです。
154
+
155
+
156
+
157
+ - [https://jsfiddle.net/jun68ykt/842x9gbe/1/](https://jsfiddle.net/jun68ykt/842x9gbe/1/)

5

テキスト修正

2018/11/13 02:41

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -92,6 +92,10 @@
92
92
 
93
93
  ```javascript
94
94
 
95
+ const regexp = /[(\w+)](.+)[/\1]/;
96
+
97
+
98
+
95
99
  const contents = [];
96
100
 
97
101
 
@@ -108,10 +112,6 @@
108
112
 
109
113
  }
110
114
 
111
-
112
-
113
- console.log(contents);
114
-
115
115
  ```
116
116
 
117
117
 

4

テキスト修正

2018/11/13 01:23

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -69,3 +69,55 @@
69
69
 
70
70
 
71
71
  **上記の動作確認用サンプル: ** [https://jsfiddle.net/jun68ykt/h50vnda6/1/](https://jsfiddle.net/jun68ykt/h50vnda6/1/)
72
+
73
+
74
+
75
+
76
+
77
+ #### 追記
78
+
79
+
80
+
81
+ コメント頂きました、以下
82
+
83
+
84
+
85
+ > ちなみに、[xx]AAA[/xx][xx]BBB[/xx]の様にこのパターンが複数ある場合に、['AAA', 'BBB']の様に結果を取り出したい場合、どの様にするのが良いかご存知でしょうか?
86
+
87
+
88
+
89
+ について回答します。以下のように、対象テキストからマッチした部分を削除してループさせていけばできると思います。
90
+
91
+
92
+
93
+ ```javascript
94
+
95
+ const contents = [];
96
+
97
+
98
+
99
+ let m;
100
+
101
+
102
+
103
+ while (m = text.match(regexp)) {
104
+
105
+ contents.push(m[2]);
106
+
107
+ text = text.replace(m[0], '');
108
+
109
+ }
110
+
111
+
112
+
113
+ console.log(contents);
114
+
115
+ ```
116
+
117
+
118
+
119
+ 以下は、上記のコードを試すサンプルです。
120
+
121
+
122
+
123
+ - [https://jsfiddle.net/jun68ykt/dvqy5m3o/1/](https://jsfiddle.net/jun68ykt/dvqy5m3o/1/)

3

テキスト修正

2018/11/13 01:21

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,7 +2,15 @@
2
2
 
3
3
 
4
4
 
5
+ ご質問にある、
6
+
7
+
8
+
5
- かなり横着なやり方かもしれませんが以下はgygeai234さんのやりたいことせてないでしょうか?
9
+ > 正規表現を使い[]だタグとタグ抜き出したい
10
+
11
+
12
+
13
+ という要件をそのまま端的にコードにすると、例えば以下が考えられます。
6
14
 
7
15
 
8
16
 

2

テキスト修正

2018/11/12 22:49

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
File without changes

1

テキスト修正

2018/11/12 21:41

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -23,3 +23,41 @@
23
23
 
24
24
 
25
25
  参考になれば幸いです。
26
+
27
+
28
+
29
+ #### 追記
30
+
31
+
32
+
33
+ `[hoge] ・・・ [/hoge]` というテキストの `[hoge]`タグで囲まれた `・・・` の部分を(`[industry]`も含めて)取り出したいのであれば、以下でどうでしょう?
34
+
35
+
36
+
37
+ ```javascript
38
+
39
+ const regexp = /[(\w+)](.+)[/\1]/;
40
+
41
+
42
+
43
+ const text = "[hoge]Lorem Ipsum is simply dummy text of the printing and typesetting [industry]. Lorem Ipsum has been[/hoge]";
44
+
45
+
46
+
47
+ const myArray = text.match(regexp);
48
+
49
+
50
+
51
+ if (myArray) {
52
+
53
+ console.log(myArray[2]);
54
+
55
+ }
56
+
57
+
58
+
59
+ ```
60
+
61
+
62
+
63
+ **上記の動作確認用サンプル: ** [https://jsfiddle.net/jun68ykt/h50vnda6/1/](https://jsfiddle.net/jun68ykt/h50vnda6/1/)