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

質問編集履歴

7

誤字

2019/09/21 15:16

投稿

DiningKitchen
DiningKitchen

スコア14

title CHANGED
File without changes
body CHANGED
@@ -90,14 +90,14 @@
90
90
  ###補足
91
91
  twitterのタグ抽出とほぼ同じなので、詳しい抽出条件は次の通りです。
92
92
 
93
- ■基本的には、このスペースの範囲をタグ化したい
93
+ ■基本的には、以下3つ満たしたときにタグ化する
94
94
  ・文字列の先頭が、「#」か「#」のようなシャープであること
95
- ・シャープ直前が、半角か全角のスペースあること
95
+ ・シャープ直前が、半角か全角のスペースあること
96
- ・文字列の直後が、半角か全角のスペースあること
96
+ ・文字列の直後が、半角か全角のスペースあること
97
97
 
98
- ■例外としてスペースが不要場合
98
+ ■例外としてスペースがなくてもタグ化する
99
- ・シャープ直前が、記号、行頭、textarea先頭の場合、シャープ直前のスペースは不要
99
+ ・シャープ直前が、記号、行頭、textarea先頭の場合、シャープ直前のスペースはがなくてもタグ化
100
- ・文字列がtextarea末尾の場合、直後のスペースは不要
100
+ ・文字列がtextarea末尾の場合、直後のスペースがなくてもタグ化
101
101
 
102
102
  (ただしtwitterでは記号が除外され、「#tag!」のタグは「#tag」と抽出されますが、今回は「#tag!」で構いません。)
103
103
 

6

条件を整理

2019/09/21 15:16

投稿

DiningKitchen
DiningKitchen

スコア14

title CHANGED
File without changes
body CHANGED
@@ -90,18 +90,16 @@
90
90
  ###補足
91
91
  twitterのタグ抽出とほぼ同じなので、詳しい抽出条件は次の通りです。
92
92
 
93
- 基本条件)
93
+ 基本的には、このスペースの範囲をタグ化したい
94
- ・文字列の先頭が「#」か「#」のようなシャープであること
94
+ ・文字列の先頭が「#」か「#」のようなシャープであること
95
- ・シャープ直前半角か全角のスペースがあること
95
+ ・シャープ直前が、半角か全角のスペースがあること
96
- ・文字列の直後半角か全角のスペースがあること
96
+ ・文字列の直後が、半角か全角のスペースがあること
97
- ・このスペースの間の文字列をタグとして認識したい
98
97
 
99
- 例外条件)
98
+ 例外としてスペースが不要な場合
100
- ・シャープ直前が記号行頭の場合、シャープ直前のスペースは不要
99
+ ・シャープ直前が記号行頭、textarea先頭の場合、シャープ直前のスペースは不要
101
- ・文字列がtextarea先頭の場合、直前のスペースは不要
102
100
  ・文字列がtextarea末尾の場合、直後のスペースは不要
103
101
 
104
- (ただしtwitterでは記号が除外され、「#tag!」は「#tag」と抽出されますが、今回は「#tag!」で構いません。)
102
+ (ただしtwitterでは記号が除外され、「#tag!」のタグは「#tag」と抽出されますが、今回は「#tag!」で構いません。)
105
103
 
106
104
  以上の条件の具体例を以下に列挙致しましたので、ご参照ください。
107
- [https://jsfiddle.net/boa1gm7r/](https://jsfiddle.net/boa1gm7r/)
105
+ [https://jsfiddle.net/04awdpu1/](https://jsfiddle.net/04awdpu1/)

5

シャープ直前が記号の場合→シャープ直前が記号か行頭の場合

2019/09/21 10:01

投稿

DiningKitchen
DiningKitchen

スコア14

title CHANGED
File without changes
body CHANGED
@@ -97,11 +97,11 @@
97
97
  ・このスペースの間の文字列をタグとして認識したい
98
98
 
99
99
  (例外条件)
100
- ・シャープ直前が記号の場合、シャープ直前のスペースは不要
100
+ ・シャープ直前が記号か行頭の場合、シャープ直前のスペースは不要
101
101
  ・文字列がtextarea先頭の場合、直前のスペースは不要
102
102
  ・文字列がtextarea末尾の場合、直後のスペースは不要
103
103
 
104
104
  (ただしtwitterでは記号が除外され、「#tag!」は「#tag」と抽出されますが、今回は「#tag!」で構いません。)
105
105
 
106
106
  以上の条件の具体例を以下に列挙致しましたので、ご参照ください。
107
- [https://jsfiddle.net/qe9h0yp2/](https://jsfiddle.net/qe9h0yp2/)
107
+ [https://jsfiddle.net/boa1gm7r/](https://jsfiddle.net/boa1gm7r/)

4

修正

2019/09/21 09:44

投稿

DiningKitchen
DiningKitchen

スコア14

title CHANGED
File without changes
body CHANGED
@@ -97,11 +97,11 @@
97
97
  ・このスペースの間の文字列をタグとして認識したい
98
98
 
99
99
  (例外条件)
100
- ・シャープ直前がカンマか句読点の場合、シャープ直前のスペースは不要
100
+ ・シャープ直前が記号の場合、シャープ直前のスペースは不要
101
101
  ・文字列がtextarea先頭の場合、直前のスペースは不要
102
102
  ・文字列がtextarea末尾の場合、直後のスペースは不要
103
103
 
104
104
  (ただしtwitterでは記号が除外され、「#tag!」は「#tag」と抽出されますが、今回は「#tag!」で構いません。)
105
105
 
106
106
  以上の条件の具体例を以下に列挙致しましたので、ご参照ください。
107
- [https://jsfiddle.net/L5w76z9e/](https://jsfiddle.net/L5w76z9e/)
107
+ [https://jsfiddle.net/qe9h0yp2/](https://jsfiddle.net/qe9h0yp2/)

3

具体例を追加

2019/09/20 11:55

投稿

DiningKitchen
DiningKitchen

スコア14

title CHANGED
File without changes
body CHANGED
@@ -93,12 +93,15 @@
93
93
  (基本条件)
94
94
  ・文字列の先頭が「#」か「#」のようなシャープであること
95
95
  ・シャープ直前に半角か全角のスペースがあること
96
- ・文字列の直後にスペースがあること
96
+ ・文字列の直後に半角か全角のスペースがあること
97
- ・この直前と直後のスペースの間の文字列をタグとして認識したい
97
+ ・このスペースの間の文字列をタグとして認識したい
98
98
 
99
99
  (例外条件)
100
- ・シャープがカンマか句読点の次にある場合、シャープ直前のスペースは不要
100
+ ・シャープ直前がカンマか句読点の場合、シャープ直前のスペースは不要
101
- ・文字列がtextarea先頭なら直前のスペースは不要
101
+ ・文字列がtextarea先頭の場合、直前のスペースは不要
102
- ・文字列がtextarea末尾なら直後のスペースは不要
102
+ ・文字列がtextarea末尾の場合、直後のスペースは不要
103
103
 
104
- ただしtwitterでは記号が除外され、「#tag!」は「#tag」と抽出されますが、今回は「#tag!」で構いません
104
+ ただしtwitterでは記号が除外され、「#tag!」は「#tag」と抽出されますが、今回は「#tag!」で構いません。)
105
+
106
+ 以上の条件の具体例を以下に列挙致しましたので、ご参照ください。
107
+ [https://jsfiddle.net/L5w76z9e/](https://jsfiddle.net/L5w76z9e/)

2

条件を補足

2019/09/20 11:46

投稿

DiningKitchen
DiningKitchen

スコア14

title CHANGED
File without changes
body CHANGED
@@ -85,4 +85,20 @@
85
85
  ###ソースコードのサンプル
86
86
  [https://jsfiddle.net/udwzey7v/](https://jsfiddle.net/udwzey7v/)
87
87
 
88
- ご意見、ご回答、宜しくお願い致します。
88
+ ご意見、ご回答、宜しくお願い致します。
89
+
90
+ ###補足
91
+ twitterのタグ抽出とほぼ同じなので、詳しい抽出条件は次の通りです。
92
+
93
+ (基本条件)
94
+ ・文字列の先頭が「#」か「#」のようなシャープであること
95
+ ・シャープ直前に半角か全角のスペースがあること
96
+ ・文字列の直後にスペースがあること
97
+ ・この直前と直後のスペースの間の文字列をタグとして認識したい
98
+
99
+ (例外条件)
100
+ ・シャープがカンマか句読点の次にある場合、シャープ直前のスペースは不要
101
+ ・文字列がtextareaの先頭なら直前のスペースは不要
102
+ ・文字列がtextareaの末尾なら直後のスペースは不要
103
+
104
+ ただしtwitterでは記号が除外され、「#tag!」は「#tag」と抽出されますが、今回は「#tag!」で構いません

1

ソースコードを訂正

2019/09/20 11:09

投稿

DiningKitchen
DiningKitchen

スコア14

title CHANGED
File without changes
body CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  ###該当のソースコード
28
28
  ```html
29
- <textarea type="text" id="keyword" class="box" placeholder="#をつけるハッシュ検索" value="">#hello world #yes we #can</textarea>
29
+ <textarea type="text" id="keyword" class="box" value="">#hello world #yes we #can</textarea>
30
30
  <div id="clone" class="box"></div>
31
31
  <button id="btn">clone</button>
32
32
  ```
@@ -45,25 +45,22 @@
45
45
 
46
46
  ```
47
47
  ```
48
- function hash(str){
48
+ function hash( str ){
49
49
 
50
- var regexp = new RegExp(/#+[^  ]+(\s| )/);
51
- var refunction hash( str ) {
52
-
53
50
  var regexp = new RegExp( /#+[^  ]+(\s| )/ );
54
51
  var result = regexp.test( str );
55
52
 
56
- if ( regexp.test(str) ) {
53
+ if ( regexp.test( str ) ) {
57
54
 
58
55
  // 取得
59
56
  var tags = str.match( /#+[^  ]+(\s| )/g );
60
57
  console.log( 'tags;', tags );
61
58
 
62
59
  // タグにspanをつけて全文をコピー
63
- tags.forEach( function( value ) {
60
+ tags.forEach(function( value ) {
64
61
  if ( str.match( value ) ) {
65
62
  var target = str.match( value );
66
- console.log( 'target:', target );
63
+ console.log( 'target:',target );
67
64
  var span = '<span class="tag">' + target + '</span>';
68
65
  var replaced = str.replace( target, span );
69
66
  $( '#clone' ).html( replaced );
@@ -75,17 +72,17 @@
75
72
  }
76
73
  }
77
74
 
78
- $( '#btn' ).click( function() {
75
+ $( '#btn' ).click( function(){
79
76
  hash( $( '#keyword' ).val() );
80
77
  });
78
+
81
79
  ```
82
80
 
83
81
  ###試したこと
84
82
  なんとなく➁については原因がわかっていて、ループの中で`$( '#clone' ).html( replaced );`を書いているために毎回上書きされてしまい、だから最後にしかspanがつかないのだと思うのですが、ループの外に出してみればコピー自体生じず、解決策がわかりません。
85
-
86
83
  そして➀と➂についてはそもそも処理がわからない状況です。
87
84
 
88
85
  ###ソースコードのサンプル
89
- [https://jsfiddle.net/bh7veqw1/](https://jsfiddle.net/bh7veqw1/)
86
+ [https://jsfiddle.net/udwzey7v/](https://jsfiddle.net/udwzey7v/)
90
87
 
91
88
  ご意見、ご回答、宜しくお願い致します。