teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

テキスト修正

2019/07/27 04:31

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/07/27 04:31

投稿

jun68ykt
jun68ykt

スコア9058

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` 、hrefなどの属性を1つ以上持つような `a` タグを持つ場合、その `a` タグで囲まれた内容を取り出し、そのような `a` がない場合は何もせず `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
- なお、上記の正規表現だと、 `a`タグの開始が、 属性のな `<a>` だっりする場合には対応きません。また、 str の中に、該当する `a`タグが複数あっても、`a`を除去するのはマッチした先頭だけです。これらに対応するには、正規表現を修正しなければなりませんが、まずはご質問に明示的に載された最低限要件すもの回答しした
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

テキスト修正

2019/07/26 21:55

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/07/26 21:37

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -36,7 +36,7 @@
36
36
  $('div.nested')
37
37
  .html()
38
38
  .split('\n')
39
- .map(line => /<a\s+href=[^>]+>(.+)</a>/.exec(line) ? RegExp.$1 : line)
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/1/](https://jsfiddle.net/jun68ykt/mb1rt0Ld/1/)
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/) を使うとより短いコードで実現できます。