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

回答編集履歴

7

修正

2020/04/29 11:47

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -18,11 +18,11 @@
18
18
 
19
19
  ### 追記
20
20
 
21
- ^ は行頭にマッチするため、複数行フラグを使った場合、改行の後の位置にもマッチします。$ も同様に改行の前にマッチします。
21
+ ^ は行頭にマッチする正規表現で、複数行フラグを使った場合、改行の後の位置にもマッチします。$ も同様に改行の前にマッチします。
22
22
 
23
23
  [正規表現 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#special-caret)
24
24
 
25
- 複数行モードを使用するには、次のように m フラグを入れます。
25
+ 複数行モードを使用するには、次のように m フラグを入れます。そうしない場合、これらは文字列の先頭と末尾のみにマッチします。
26
26
 
27
27
  ```JavaScript
28
28
  const price = "1000000\n10000\n100";

6

追記

2020/04/29 11:47

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -14,4 +14,27 @@
14
14
 
15
15
  ###
16
16
 
17
- **なお、コメントに書いたように、正規表現を使わない標準的な方法が存在します。正規表現はパフォーマンスが悪く、車輪の再発明にもなるので、そちらをお勧めします。**
17
+ **なお、コメントに書いたように、正規表現を使わない標準的な方法が存在します。正規表現はパフォーマンスが悪く、車輪の再発明にもなるので、そちらをお勧めします。**
18
+
19
+ ### 追記
20
+
21
+ ^ は行頭にマッチするため、複数行フラグを使った場合、改行の後の位置にもマッチします。$ も同様に改行の前にマッチします。
22
+
23
+ [正規表現 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#special-caret)
24
+
25
+ 複数行モードを使用するには、次のように m フラグを入れます。
26
+
27
+ ```JavaScript
28
+ const price = "1000000\n10000\n100";
29
+ console.log(price.replace(/(?!^)(?=(?:\d{3})+$)/mg, ","));
30
+ ```
31
+
32
+ この結果は次のようになります。
33
+
34
+ ```
35
+ 1,000,000
36
+ 10,000
37
+ 100
38
+ ```
39
+
40
+ その他の言語では、複数行モードでも文字列の先頭と末尾にマッチする \A と \z が使えるものもありますが、JavaScript では使えないようです。

5

追記

2020/04/29 11:45

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -6,6 +6,12 @@
6
6
 
7
7
  **(?!^) は「行頭でない位置」を表す正規表現です。**
8
8
 
9
+ (?=(?:\d{3})+$) は、行末から数えて数字 3 つ毎の先頭にマッチします。そこにカンマを挿入するわけですが、ただし行頭を除くというのが (?!^) の意味です。
10
+
11
+ 例えば 100000000 が対象のとき、その記述が無いと次のようになることを確かめてください。
12
+
13
+ > ,100,000,000
14
+
9
15
  ###
10
16
 
11
17
  **なお、コメントに書いたように、正規表現を使わない標準的な方法が存在します。正規表現はパフォーマンスが悪く、車輪の再発明にもなるので、そちらをお勧めします。**

4

修正

2020/04/29 08:20

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  例えば文字列 abc の ^ を 0 に置換することは、行頭に 0 を挿入するのと同義です。結果はもちろん 0abc になります。
6
6
 
7
- (?!^) は「行頭でない位置」を表す正規表現です。
7
+ **(?!^) は「行頭でない位置」を表す正規表現です。**
8
8
 
9
+ ###
10
+
9
11
  **なお、コメントに書いたように、正規表現を使わない標準的な方法が存在します。正規表現はパフォーマンスが悪く、車輪の再発明にもなるので、そちらをお勧めします。**

3

修正

2020/04/29 08:18

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -1,4 +1,4 @@
1
- 行頭です。行頭にカンマを入れないようにしています。
1
+ 行頭にカンマを入れないようにしています。
2
2
 
3
3
  正規表現がマッチするのは文字だけではありません。例えば ^ は行頭、$ は行末にマッチします。「行頭の文字」ではなく、「行頭の位置」にマッチするのです。
4
4
 

2

追記

2020/04/29 08:17

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -4,4 +4,6 @@
4
4
 
5
5
  例えば文字列 abc の ^ を 0 に置換することは、行頭に 0 を挿入するのと同義です。結果はもちろん 0abc になります。
6
6
 
7
- (?!^) は「行頭でない位置」を表す正規表現です。
7
+ (?!^) は「行頭でない位置」を表す正規表現です。
8
+
9
+ **なお、コメントに書いたように、正規表現を使わない標準的な方法が存在します。正規表現はパフォーマンスが悪く、車輪の再発明にもなるので、そちらをお勧めします。**

1

追記

2020/04/29 08:14

投稿

Zuishin
Zuishin

スコア28675

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