回答編集履歴

5

追記

2019/09/25 17:52

投稿

thyda.eiqau
thyda.eiqau

スコア2982

test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
  const replaced = haystack.replace(reg, (match, prefix, tagging) => `${prefix}<span class="tag">${tagging}</span>`);
86
86
 
87
- $('#clone').html(replaced.substring(1, replaced.length - 2));
87
+ $('#clone').html(replaced.substring(1, replaced.length - 1)); // Sep 26, 2:51編集
88
88
 
89
89
  }
90
90
 

4

エスケープ処理に間違いがあったのを修正

2019/09/25 17:52

投稿

thyda.eiqau
thyda.eiqau

スコア2982

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
  const prefixChars = ['、', '。'];
82
82
 
83
- const reg = new RegExp(`([ \s${prefixChars.join('')}])([##][^\s ]+)`, 'g'); // 1:53修正
83
+ const reg = new RegExp(`([ \s${prefixChars.join('')}])([##][^\s ]+)`, 'g'); // 1:53修正→Sep 25 18:55再編集
84
84
 
85
85
  const replaced = haystack.replace(reg, (match, prefix, tagging) => `${prefix}<span class="tag">${tagging}</span>`);
86
86
 

3

コメントに対する追記に対するコメントに対する追記の修正

2019/09/25 09:56

投稿

thyda.eiqau
thyda.eiqau

スコア2982

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
  const prefixChars = ['、', '。'];
82
82
 
83
- const reg = new RegExp(`([ \s${prefixChars.join('')}])([##][ \S]+)`, 'g');
83
+ const reg = new RegExp(`([ \s${prefixChars.join('')}])([##][^\s ]+)`, 'g'); // 1:53修正
84
84
 
85
85
  const replaced = haystack.replace(reg, (match, prefix, tagging) => `${prefix}<span class="tag">${tagging}</span>`);
86
86
 

2

コメントに対する追記に対するコメントに対する追記

2019/09/21 16:53

投稿

thyda.eiqau
thyda.eiqau

スコア2982

test CHANGED
@@ -43,3 +43,49 @@
43
43
  出先なのでかんたんに画像で恐縮ですが、\rと\nを条件に出したら改行のところも動きませんでしょうか。
44
44
 
45
45
  ![regex101](5250bbb379db3e1f44a9624e84daffde.png)
46
+
47
+
48
+
49
+ ----
50
+
51
+ Sep 22, 2019 1:10追記
52
+
53
+ > なぜか「#we」だけがタグ認定されない事態に…
54
+
55
+
56
+
57
+ なるほどーーーーー、
58
+
59
+ ` #yes改行#we改行#can ` に対して「前後に改行空白を持つ部分」で取っているので、まず1つ目で「 #yes改行」が取られて、次の#weは前に改行を持っていない(yesに取られた)状態になって、というような感じで、偶数個めが認識されなくなりますね。
60
+
61
+ 仕様を満たすかどうかは要検証ですがこちらに変えると、ご提示の例では動くかと……
62
+
63
+
64
+
65
+ ```js
66
+
67
+ function hash(str) {
68
+
69
+ // ・文字列がtextarea先頭の場合、直前のスペースは不要
70
+
71
+ // ・文字列がtextarea末尾の場合、直後のスペースは不要
72
+
73
+ // の処理を簡単にするために前後に半角スペースを入れる
74
+
75
+ const haystack = ` ${str} `;
76
+
77
+
78
+
79
+ // タグの開始直前に許容する記号の一覧
80
+
81
+ const prefixChars = ['、', '。'];
82
+
83
+ const reg = new RegExp(`([ \s${prefixChars.join('')}])([##][ \S]+)`, 'g');
84
+
85
+ const replaced = haystack.replace(reg, (match, prefix, tagging) => `${prefix}<span class="tag">${tagging}</span>`);
86
+
87
+ $('#clone').html(replaced.substring(1, replaced.length - 2));
88
+
89
+ }
90
+
91
+ ```

1

改行について追記

2019/09/21 16:15

投稿

thyda.eiqau
thyda.eiqau

スコア2982

test CHANGED
@@ -33,3 +33,13 @@
33
33
  ```
34
34
 
35
35
  未検証ですがこんな感じではいかがでしょう
36
+
37
+
38
+
39
+ ----
40
+
41
+ Sep 21, 2019 19:00追記
42
+
43
+ 出先なのでかんたんに画像で恐縮ですが、\rと\nを条件に出したら改行のところも動きませんでしょうか。
44
+
45
+ ![regex101](5250bbb379db3e1f44a9624e84daffde.png)