回答編集履歴

7

修正

2020/04/29 11:47

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- ^ は行頭にマッチするため、複数行フラグを使った場合、改行の後の位置にもマッチします。$ も同様に改行の前にマッチします。
41
+ ^ は行頭にマッチする正規表現で、複数行フラグを使った場合、改行の後の位置にもマッチします。$ も同様に改行の前にマッチします。
42
42
 
43
43
 
44
44
 
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- 複数行モードを使用するには、次のように m フラグを入れます。
49
+ 複数行モードを使用するには、次のように m フラグを入れます。そうしない場合、これらは文字列の先頭と末尾のみにマッチします。
50
50
 
51
51
 
52
52
 

6

追記

2020/04/29 11:47

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -31,3 +31,49 @@
31
31
 
32
32
 
33
33
  **なお、コメントに書いたように、正規表現を使わない標準的な方法が存在します。正規表現はパフォーマンスが悪く、車輪の再発明にもなるので、そちらをお勧めします。**
34
+
35
+
36
+
37
+ ### 追記
38
+
39
+
40
+
41
+ ^ は行頭にマッチするため、複数行フラグを使った場合、改行の後の位置にもマッチします。$ も同様に改行の前にマッチします。
42
+
43
+
44
+
45
+ [正規表現 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#special-caret)
46
+
47
+
48
+
49
+ 複数行モードを使用するには、次のように m フラグを入れます。
50
+
51
+
52
+
53
+ ```JavaScript
54
+
55
+ const price = "1000000\n10000\n100";
56
+
57
+ console.log(price.replace(/(?!^)(?=(?:\d{3})+$)/mg, ","));
58
+
59
+ ```
60
+
61
+
62
+
63
+ この結果は次のようになります。
64
+
65
+
66
+
67
+ ```
68
+
69
+ 1,000,000
70
+
71
+ 10,000
72
+
73
+ 100
74
+
75
+ ```
76
+
77
+
78
+
79
+ その他の言語では、複数行モードでも文字列の先頭と末尾にマッチする \A と \z が使えるものもありますが、JavaScript では使えないようです。

5

追記

2020/04/29 11:45

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -14,6 +14,18 @@
14
14
 
15
15
 
16
16
 
17
+ (?=(?:\d{3})+$) は、行末から数えて数字 3 つ毎の先頭にマッチします。そこにカンマを挿入するわけですが、ただし行頭を除くというのが (?!^) の意味です。
18
+
19
+
20
+
21
+ 例えば 100000000 が対象のとき、その記述が無いと次のようになることを確かめてください。
22
+
23
+
24
+
25
+ > ,100,000,000
26
+
27
+
28
+
17
29
  ###
18
30
 
19
31
 

4

修正

2020/04/29 08:20

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -10,7 +10,11 @@
10
10
 
11
11
 
12
12
 
13
- (?!^) は「行頭でない位置」を表す正規表現です。
13
+ **(?!^) は「行頭でない位置」を表す正規表現です。**
14
+
15
+
16
+
17
+ ###
14
18
 
15
19
 
16
20
 

3

修正

2020/04/29 08:18

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -1,4 +1,4 @@
1
- 行頭です。行頭にカンマを入れないようにしています。
1
+ 行頭にカンマを入れないようにしています。
2
2
 
3
3
 
4
4
 

2

追記

2020/04/29 08:17

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -11,3 +11,7 @@
11
11
 
12
12
 
13
13
  (?!^) は「行頭でない位置」を表す正規表現です。
14
+
15
+
16
+
17
+ **なお、コメントに書いたように、正規表現を使わない標準的な方法が存在します。正規表現はパフォーマンスが悪く、車輪の再発明にもなるので、そちらをお勧めします。**

1

追記

2020/04/29 08:14

投稿

Zuishin
Zuishin

スコア28669

test CHANGED
@@ -1 +1,13 @@
1
1
  行頭です。行頭にカンマを入れないようにしています。
2
+
3
+
4
+
5
+ 正規表現がマッチするのは文字だけではありません。例えば ^ は行頭、$ は行末にマッチします。「行頭の文字」ではなく、「行頭の位置」にマッチするのです。
6
+
7
+
8
+
9
+ 例えば文字列 abc の ^ を 0 に置換することは、行頭に 0 を挿入するのと同義です。結果はもちろん 0abc になります。
10
+
11
+
12
+
13
+ (?!^) は「行頭でない位置」を表す正規表現です。