回答編集履歴

1

String.prototype.replace

2019/07/25 03:49

投稿

think49
think49

スコア18162

test CHANGED
@@ -1,3 +1,7 @@
1
+ ### encodeURIComponent
2
+
3
+
4
+
1
5
  - 半角 … size=1
2
6
 
3
7
  - 全角 … size=2, 2byte以上(UTF-8基準)
@@ -16,4 +20,46 @@
16
20
 
17
21
 
18
22
 
23
+ ### String.prototype.replace()
24
+
25
+
26
+
27
+ 正規表現で全角文字を2文字に置換する方法。
28
+
29
+ (**サロゲートペア**はしっかり調べてないので、別途問題がないか確認下さい)
30
+
31
+
32
+
33
+ ```JavaScript
34
+
35
+ strimg.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\s\S]/g, char => encodeURIComponent(char).length > 3 ? 'ZZ', char).length
36
+
37
+ ```
38
+
39
+
40
+
41
+ 実装が対応しているなら、`su` フラグを使うことで正規表現パターンをシンプルに出来ます?
42
+
43
+ https://jsprimer.net/basic/string-unicode/
44
+
45
+ http://js-next.hatenablog.com/entry/2018/09/08/225552
46
+
47
+
48
+
49
+ ```JavaScript
50
+
51
+ strimg.replace(/./gsu, char => encodeURIComponent(char).length > 3 ? 'ZZ', char).length
52
+
53
+ ```
54
+
55
+
56
+
57
+ ただし、これらは正規表現を利用する為に、無理やりダミー文字列を生成しているコードであり、洗練されたコードではないと私は思います。
58
+
59
+
60
+
61
+ 正規表現は、**検索**と**置換**を行うための文法であり、文字列をカウントする機能はありません。
62
+
63
+
64
+
19
65
  Re: chiruchiru さん