回答編集履歴
4
テキスト修正
test
CHANGED
@@ -188,7 +188,7 @@
|
|
188
188
|
|
189
189
|
|
190
190
|
|
191
|
-
先に書いた回答でも、上記の三項演算子を使っ
|
191
|
+
先に書いた回答でも、上記の三項演算子を使って、なるべくコードを短くなるようにしています。
|
192
192
|
|
193
193
|
|
194
194
|
|
3
テキスト修正
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`
|
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>`
|
217
|
+
なお、上記の正規表現だと、 `a`タグの開始が、 属性のない `<a>` である場合には対応できません。また、 str の中に、該当する `a`タグが複数あっても、`a`を除去するのは先頭のものだけです。これらに対応するには、正規表現を見直さなければなりませんが、まずはご質問に明示的に記載された最低限の要件を満たすものを回答しました。
|
196
218
|
|
197
219
|
|
198
220
|
|
2
テキスト修正
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
テキスト修正
test
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
.split('\n')
|
76
76
|
|
77
|
-
.map(line => /<a\s+
|
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/
|
119
|
+
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/mb1rt0Ld/2/](https://jsfiddle.net/jun68ykt/mb1rt0Ld/2/)
|
120
120
|
|
121
121
|
|
122
122
|
|