回答編集履歴

4

テキスト修正

2019/07/27 04:31

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -188,7 +188,7 @@
188
188
 
189
189
 
190
190
 
191
- 先に書いた回答でも、上記の三項演算子を使った文字列置換使っています。
191
+ 先に書いた回答でも、上記の三項演算子を使って、なるべくコード短くなるようにしています。
192
192
 
193
193
 
194
194
 

3

テキスト修正

2019/07/27 04:31

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -166,10 +166,6 @@
166
166
 
167
167
 
168
168
 
169
- 要点だけ手短かに書きます。
170
-
171
-
172
-
173
169
  ご質問にあった、
174
170
 
175
171
 
@@ -178,7 +174,7 @@
178
174
 
179
175
 
180
176
 
181
- に回答しますと、 HTMLの文字列 `str` が与えられたときに、 `str` 、hrefなどの属性を1つ以上持つような `a` タグを持つ場合、その `a` タグで囲まれた内容を取り出し、そのような `a` がない場合は何もせず `str` をそのまま返す関数は以下のように書けます。
177
+ に回答しますと、 HTMLの文字列 `str` が与えられたときに、 `str` の中に、hrefなどの属性を1つ以上持つような `a` タグが含まれる場合、その `a` タグで囲まれた内容をし、そのような `a` タグがない場合は何もせず `str` をそのまま返す関数は以下のように書けます。
182
178
 
183
179
 
184
180
 
@@ -192,7 +188,33 @@
192
188
 
193
189
 
194
190
 
191
+ 先に書いた回答でも、上記の三項演算子を使った文字列置換を使っています。
192
+
193
+
194
+
195
+ または、 [RegExp.$1 は非推奨](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/n) になっているので、使用を避けるとすれば以下です。
196
+
197
+
198
+
199
+ ```javascript
200
+
201
+ const unwrapOuterLink = str => {
202
+
203
+ const m = /<a\s+[^>]+>(.+)</a>/.exec(str);
204
+
205
+ return m ? m[1] : str;
206
+
207
+ }
208
+
209
+ ```
210
+
211
+ - **動作確認用サンプル: ** [https://jsfiddle.net/jun68ykt/5ybt8nsu/1](https://jsfiddle.net/jun68ykt/5ybt8nsu/1)
212
+
213
+
214
+
215
+
216
+
195
- なお、上記の正規表現だと、 `a`タグの開始が、 属性のない `<a>` だったりする場合には対応できません。また、 str の中に、該当する `a`タグが複数あっても、`a`を除去するのはマッチした先頭だけです。これらに対応するには、正規表現を修正しなければなりませんが、まずはご質問に明示的に記載された最低限の要件を満たすものを回答しました。
217
+ なお、上記の正規表現だと、 `a`タグの開始が、 属性のない `<a>` である場合には対応できません。また、 str の中に、該当する `a`タグが複数あっても、`a`を除去するのは先頭のものだけです。これらに対応するには、正規表現を見直さなければなりませんが、まずはご質問に明示的に記載された最低限の要件を満たすものを回答しました。
196
218
 
197
219
 
198
220
 

2

テキスト修正

2019/07/26 21:55

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -162,4 +162,38 @@
162
162
 
163
163
 
164
164
 
165
+ ### 追記
166
+
167
+
168
+
169
+ 要点だけ手短かに書きます。
170
+
171
+
172
+
173
+ ご質問にあった、
174
+
175
+
176
+
177
+ > strをstr2に変えたいのです。
178
+
179
+
180
+
181
+ に回答しますと、 HTMLの文字列 `str` が与えられたときに、 `str` が、hrefなどの属性を1つ以上持つような `a` タグを持つ場合、その `a` タグで囲まれた内容を取り出し、そのような `a` がない場合は何もせず `str` をそのまま返す関数は以下のように書けます。
182
+
183
+
184
+
185
+ ```javascript
186
+
187
+ const unwrapOuterLink = str => /<a\s+[^>]+>(.+)</a>/.exec(str) ? RegExp.$1 : str;
188
+
189
+ ```
190
+
191
+ - **動作確認用サンプル: ** [https://jsfiddle.net/jun68ykt/5ybt8nsu/](https://jsfiddle.net/jun68ykt/5ybt8nsu/)
192
+
193
+
194
+
195
+ なお、上記の正規表現だと、 `a`タグの開始が、 属性のない `<a>` だったりする場合には対応できません。また、 str の中に、該当する `a`タグが複数あっても、`a`を除去するのはマッチした先頭だけです。これらに対応するには、正規表現を修正しなければなりませんが、まずはご質問に明示的に記載された最低限の要件を満たすものを回答しました。
196
+
197
+
198
+
165
199
  以上、参考になれば幸いです。

1

テキスト修正

2019/07/26 21:37

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
  .split('\n')
76
76
 
77
- .map(line => /<a\s+href=[^>]+>(.+)</a>/.exec(line) ? RegExp.$1 : line)
77
+ .map(line => /<a\s+[^>]+>(.+)</a>/.exec(line) ? RegExp.$1 : line)
78
78
 
79
79
  .join('\n');
80
80
 
@@ -116,7 +116,7 @@
116
116
 
117
117
  ```
118
118
 
119
- - **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/mb1rt0Ld/1/](https://jsfiddle.net/jun68ykt/mb1rt0Ld/1/)
119
+ - **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/mb1rt0Ld/2/](https://jsfiddle.net/jun68ykt/mb1rt0Ld/2/)
120
120
 
121
121
 
122
122