回答編集履歴
4
テキスト修正
answer
CHANGED
@@ -93,7 +93,7 @@
|
|
93
93
|
```
|
94
94
|
- **動作確認用サンプル: ** [https://jsfiddle.net/jun68ykt/5ybt8nsu/](https://jsfiddle.net/jun68ykt/5ybt8nsu/)
|
95
95
|
|
96
|
-
先に書いた回答でも、上記の三項演算子を使っ
|
96
|
+
先に書いた回答でも、上記の三項演算子を使って、なるべくコードを短くなるようにしています。
|
97
97
|
|
98
98
|
または、 [RegExp.$1 は非推奨](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/n) になっているので、使用を避けるとすれば以下です。
|
99
99
|
|
3
テキスト修正
answer
CHANGED
@@ -82,19 +82,30 @@
|
|
82
82
|
|
83
83
|
### 追記
|
84
84
|
|
85
|
-
要点だけ手短かに書きます。
|
86
|
-
|
87
85
|
ご質問にあった、
|
88
86
|
|
89
87
|
> strをstr2に変えたいのです。
|
90
88
|
|
91
|
-
に回答しますと、 HTMLの文字列 `str` が与えられたときに、 `str`
|
89
|
+
に回答しますと、 HTMLの文字列 `str` が与えられたときに、 `str` の中に、hrefなどの属性を1つ以上持つような `a` タグが含まれる場合、その `a` タグで囲まれた内容を返し、そのような `a` タグがない場合は何もせず `str` をそのまま返す関数は、以下のように書けます。
|
92
90
|
|
93
91
|
```javascript
|
94
92
|
const unwrapOuterLink = str => /<a\s+[^>]+>(.+)</a>/.exec(str) ? RegExp.$1 : str;
|
95
93
|
```
|
96
94
|
- **動作確認用サンプル: ** [https://jsfiddle.net/jun68ykt/5ybt8nsu/](https://jsfiddle.net/jun68ykt/5ybt8nsu/)
|
97
95
|
|
98
|
-
|
96
|
+
先に書いた回答でも、上記の三項演算子を使った文字列置換を使っています。
|
99
97
|
|
98
|
+
または、 [RegExp.$1 は非推奨](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/n) になっているので、使用を避けるとすれば以下です。
|
99
|
+
|
100
|
+
```javascript
|
101
|
+
const unwrapOuterLink = str => {
|
102
|
+
const m = /<a\s+[^>]+>(.+)</a>/.exec(str);
|
103
|
+
return m ? m[1] : str;
|
104
|
+
}
|
105
|
+
```
|
106
|
+
- **動作確認用サンプル: ** [https://jsfiddle.net/jun68ykt/5ybt8nsu/1](https://jsfiddle.net/jun68ykt/5ybt8nsu/1)
|
107
|
+
|
108
|
+
|
109
|
+
なお、上記の正規表現だと、 `a`タグの開始が、 属性のない `<a>` である場合には対応できません。また、 str の中に、該当する `a`タグが複数あっても、`a`を除去するのは先頭のものだけです。これらに対応するには、正規表現を見直さなければなりませんが、まずはご質問に明示的に記載された最低限の要件を満たすものを回答しました。
|
110
|
+
|
100
111
|
以上、参考になれば幸いです。
|
2
テキスト修正
answer
CHANGED
@@ -80,4 +80,21 @@
|
|
80
80
|
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/rtdbxs1g/1/](https://jsfiddle.net/jun68ykt/rtdbxs1g/1/)
|
81
81
|
|
82
82
|
|
83
|
+
### 追記
|
84
|
+
|
85
|
+
要点だけ手短かに書きます。
|
86
|
+
|
87
|
+
ご質問にあった、
|
88
|
+
|
89
|
+
> strをstr2に変えたいのです。
|
90
|
+
|
91
|
+
に回答しますと、 HTMLの文字列 `str` が与えられたときに、 `str` が、hrefなどの属性を1つ以上持つような `a` タグを持つ場合、その `a` タグで囲まれた内容を取り出し、そのような `a` がない場合は何もせず `str` をそのまま返す関数は以下のように書けます。
|
92
|
+
|
93
|
+
```javascript
|
94
|
+
const unwrapOuterLink = str => /<a\s+[^>]+>(.+)</a>/.exec(str) ? RegExp.$1 : str;
|
95
|
+
```
|
96
|
+
- **動作確認用サンプル: ** [https://jsfiddle.net/jun68ykt/5ybt8nsu/](https://jsfiddle.net/jun68ykt/5ybt8nsu/)
|
97
|
+
|
98
|
+
なお、上記の正規表現だと、 `a`タグの開始が、 属性のない `<a>` だったりする場合には対応できません。また、 str の中に、該当する `a`タグが複数あっても、`a`を除去するのはマッチした先頭だけです。これらに対応するには、正規表現を修正しなければなりませんが、まずはご質問に明示的に記載された最低限の要件を満たすものを回答しました。
|
99
|
+
|
83
100
|
以上、参考になれば幸いです。
|
1
テキスト修正
answer
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
$('div.nested')
|
37
37
|
.html()
|
38
38
|
.split('\n')
|
39
|
-
.map(line => /<a\s+
|
39
|
+
.map(line => /<a\s+[^>]+>(.+)</a>/.exec(line) ? RegExp.$1 : line)
|
40
40
|
.join('\n');
|
41
41
|
$('div.nested').html(htmlAfter);
|
42
42
|
});
|
@@ -57,7 +57,7 @@
|
|
57
57
|
});
|
58
58
|
|
59
59
|
```
|
60
|
-
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/mb1rt0Ld/
|
60
|
+
- **動作確認用のサンプル:** [https://jsfiddle.net/jun68ykt/mb1rt0Ld/2/](https://jsfiddle.net/jun68ykt/mb1rt0Ld/2/)
|
61
61
|
|
62
62
|
|
63
63
|
ちなみにJQuery の [.wrap()](https://api.jquery.com/wrap/) , [.unwrap()](https://api.jquery.com/unwrap/) を使うとより短いコードで実現できます。
|