WEBVTT

1
00:00:00.000 --> 00:00:00.926
こんにちは。

2
00:00:00.926 --> 00:00:03.702
今回はリプレイスオールを紹介します。

3
00:00:03.702 --> 00:00:09.719
これは、文字列の中で一致する箇所を、すべて別の文字列に置き換えるメソッドです。

4
00:00:09.719 --> 00:00:17.895
似た名前のリプレイスが最初の一致だけを置き換えるのに対して、リプレイスオールは残らずすべてを置き換えます。

5
00:00:17.895 --> 00:00:24.682
この動画では、書き方と引数と戻り値、記事の基本例である日付の区切りをそろえる例、

6
00:00:24.682 --> 00:00:31.470
正規表現を使う場合の決まりと、ジーフラグがない場合に起きるエラーまで、実行結果と一緒に学びます。

7
00:00:31.470 --> 00:00:39.646
前回のスターツウィズで文字列の先頭を判定した流れで、今回は文字列の中身を変換する基本操作を押さえましょう。

8
00:00:39.646 --> 00:00:43.348
まとめて置き換えたい場面に、ぴったりの道具です。

9
00:00:43.348 --> 00:00:45.218
まず動作環境を確認します。

10
00:00:45.218 --> 00:00:48.814
リプレイスオールは比較的新しい文字列メソッドです。

11
00:00:48.814 --> 00:00:53.057
クロームでは八十五以降、エッジでは八十五以降、ファイアーフォックスでは七十七以降、

12
00:00:53.057 --> 00:00:57.301
サファリでは十三・一以降で使えます。

13
00:00:57.301 --> 00:01:01.616
ノード・ジェイエスでは十五・ゼロ・ゼロ以降に対応しています。

14
00:01:01.616 --> 00:01:05.787
記事の互換性情報はエムディーエヌのデータに基づく目安です。

15
00:01:05.787 --> 00:01:12.548
古いブラウザーでは使えない場合があるため、対象環境が古い場合は先に対応状況を確認してください。

16
00:01:12.548 --> 00:01:18.589
追加の読み込みは不要で、空文字列にも関数として備わっていることを実機で確認済みです。

17
00:01:18.589 --> 00:01:23.048
迷ったときは、実際に使う環境で小さなコードを試すのが確実です。

18
00:01:23.048 --> 00:01:24.758
書き方を確認します。

19
00:01:24.758 --> 00:01:29.205
対象の文字列に続けてリプレイスオールと書き、カッコの中に探したいパターンと、

20
00:01:29.205 --> 00:01:33.652
置き換え後の内容を渡します。

21
00:01:33.652 --> 00:01:38.270
第一引数は検索文字列か、ジーフラグ付きの正規表現です。

22
00:01:38.270 --> 00:01:42.033
第二引数は置換文字列か、置換を行う関数です。

23
00:01:42.033 --> 00:01:49.045
戻り値は、すべての一致を置き換えた新しい文字列で、元の文字列自体は変更されません。

24
00:01:49.045 --> 00:01:53.492
スライドの例では、エーが三つともビーになること、ハローが二か所ともハイになることを、

25
00:01:53.492 --> 00:01:57.939
実機で確認しました。

26
00:01:57.939 --> 00:02:04.780
結果を受け取るには、戻り値を変数に入れるか、そのまま表示する形で使ってください。

27
00:02:04.780 --> 00:02:08.885
引数の順番は、探すもの、置き換え後、の順です。

28
00:02:08.885 --> 00:02:14.700
迷ったときはこの順番を声に出して確認すると、逆に書くミスを防げます。

29
00:02:14.700 --> 00:02:16.621
記事の基本例を見ます。

30
00:02:16.621 --> 00:02:25.354
二千二十六年九月二十一日という日付文字列の、スラッシュ区切りをすべてハイフンに置き換えるコードです。

31
00:02:25.354 --> 00:02:30.332
実行すると二千二十六ハイフン九ハイフン二十一と表示され、記事の期待出力と一致し、

32
00:02:30.332 --> 00:02:35.310
ノードの実機結果とも一致しました。

33
00:02:35.310 --> 00:02:44.742
記事が説明するように、これは書式をそろえる置換であり、日付として正しいかどうかを検証する処理ではありません。

34
00:02:44.742 --> 00:02:51.379
区切り文字の統一や、表記のゆれをそろえる前処理として、そのまま使える形です。

35
00:02:51.379 --> 00:02:56.269
置き換える対象が一文字でも、文章でも、考え方は同じです。

36
00:02:56.269 --> 00:03:00.112
まずはこの基本例を手で実行してみてください。

37
00:03:00.112 --> 00:03:03.746
よく似たリプレイスとの違いを実例で確かめます。

38
00:03:03.746 --> 00:03:08.169
ハローが二回登場する文字列に対して、リプレイスを使うと最初のハローだけがハイになり、

39
00:03:08.169 --> 00:03:12.592
後ろはハローのまま残ります。

40
00:03:12.592 --> 00:03:16.858
一方リプレイスオールでは、二か所ともハイに変わります。

41
00:03:16.858 --> 00:03:19.544
どちらも実機の結果と一致しました。

42
00:03:19.544 --> 00:03:25.073
すべて変えたいのにリプレイスを使ってしまうと、置き換え漏れが起きます。

43
00:03:25.073 --> 00:03:29.970
逆に、最初の一個だけ変えたい場合はリプレイスを選んでください。

44
00:03:29.970 --> 00:03:34.868
目的が全部か最初だけかで、メソッドを使い分けることが大切です。

45
00:03:34.868 --> 00:03:39.607
この違いが、リプレイスオールを選ぶ一番分かりやすい理由です。

46
00:03:39.607 --> 00:03:43.477
置き換え漏れは画面では気づきにくいため、同じ語が複数回出るデータでは、

47
00:03:43.477 --> 00:03:47.348
特に慎重に選んでください。

48
00:03:47.348 --> 00:03:50.098
第一引数に正規表現を使う例を見ます。

49
00:03:50.098 --> 00:03:55.139
エーの後に数字と英字が交互に並ぶ文字列で、数字を表すパターンにジーフラグを付けて渡すと、

50
00:03:55.139 --> 00:04:00.181
数字の部分がすべてシャープに置き換わります。

51
00:04:00.181 --> 00:04:05.986
結果はエーシャープ、ビーシャープ、シーシャープとなり、実機とも一致しました。

52
00:04:05.986 --> 00:04:11.639
正規表現を使うと、数字だけ、空白だけといった、種類で絞った置換ができます。

53
00:04:11.639 --> 00:04:16.833
ただし後で説明するように、ジーフラグを付け忘れるとエラーになります。

54
00:04:16.833 --> 00:04:23.708
正規表現は強力ですが、パターンの意味を読みながら、置換範囲を予測してから実行してください。

55
00:04:23.708 --> 00:04:30.888
たとえば空白やカンマの種類をそろえる処理でも、正規表現ならまとめて表現できる場合があります。

56
00:04:30.888 --> 00:04:33.606
第二引数に置換関数を使う例を見ます。

57
00:04:33.606 --> 00:04:37.758
置換文字列の代わりに関数を渡すと、一致が見つかるたびにその関数が呼ばれ、

58
00:04:37.758 --> 00:04:41.910
戻り値が置き換え後の文字列になります。

59
00:04:41.910 --> 00:04:48.554
スライドの例では、連続した数字を見つけて数値に直し、二倍にしてから文字列に戻しています。

60
00:04:48.554 --> 00:04:52.781
結果は百が二百、二百が四百となり、実機とも一致しました。

61
00:04:52.781 --> 00:04:59.425
決まった文字列への置き換えでは足りず、一致した内容に応じて結果を変えたい場合に便利です。

62
00:04:59.425 --> 00:05:04.709
関数の中では、元の一致を受け取って加工できる点を覚えておいてください。

63
00:05:04.709 --> 00:05:07.276
計算が必要な置換で力を発揮します。

64
00:05:07.276 --> 00:05:09.244
記事の境界条件の例を見ます。

65
00:05:09.244 --> 00:05:15.571
エーが三つ並ぶ文字列に対して、ジーフラグのない正規表現をリプレイスオールに渡すコードです。

66
00:05:15.571 --> 00:05:19.648
実行するとタイプエラーが発生し、エラー名を表示すると記事の期待出力と同じくタイプエラーとなり、

67
00:05:19.648 --> 00:05:23.725
実機とも一致しました。

68
00:05:23.725 --> 00:05:27.380
すべて置き換えるという目的と、全体を対象にしない正規表現が矛盾するため、

69
00:05:27.380 --> 00:05:31.035
エラーで知らせてくれる仕様です。

70
00:05:31.035 --> 00:05:34.550
文字列を第一引数にする場合はこの制約はありません。

71
00:05:34.550 --> 00:05:40.736
正規表現を使うときは、必ずジーフラグを付けているかを最初に確認する習慣を付けてください。

72
00:05:40.736 --> 00:05:42.642
注意点を三つ確認します。

73
00:05:42.642 --> 00:05:45.501
まず、大文字と小文字は区別されます。

74
00:05:45.501 --> 00:05:49.551
キャットと小文字のキャットが混ざる文字列では、小文字の方だけがドッグに変わり、

75
00:05:49.551 --> 00:05:53.601
実機でも確認できました。

76
00:05:53.601 --> 00:06:00.112
次に、検索文字列に空文字列を渡すと、文字と文字の間や両端にも置換文字列が入ります。

77
00:06:00.112 --> 00:06:04.401
意図せず使うと予想外の結果になるため注意してください。

78
00:06:04.401 --> 00:06:09.324
最後に、該当する箇所がなければ、元の文字列がそのまま返ります。

79
00:06:09.324 --> 00:06:11.071
エラーにはなりません。

80
00:06:11.071 --> 00:06:17.265
空文字列の扱いと大小の区別は、入力データを扱うときに特につまずきやすい点です。

81
00:06:17.265 --> 00:06:21.395
大小を区別したくない場合は、正規表現のアイフラグとジーフラグを組み合わせる方法も、

82
00:06:21.395 --> 00:06:25.524
実機で確認できます。

83
00:06:25.524 --> 00:06:28.739
置換文字列に含まれるドル記号の扱いを見ます。

84
00:06:28.739 --> 00:06:34.585
ドルとアンパサンドの組み合わせは、一致した部分そのものを表す特殊なパターンです。

85
00:06:34.585 --> 00:06:38.239
テストという文字列のティーをこのパターンで置き換えると、ティーが二重になり、

86
00:06:38.239 --> 00:06:41.893
実機でも確認できました。

87
00:06:41.893 --> 00:06:47.739
ドル記号を文字としてそのまま使いたい場合は、表記の決まりを別途確認してください。

88
00:06:47.739 --> 00:06:53.585
あわせて大切なのは、リプレイスオールを実行しても元の文字列は変わらないことです。

89
00:06:53.585 --> 00:07:00.454
変換後の値は戻り値として新しく作られるため、元の変数を上書きしたい場合は代入し直してください。

90
00:07:00.454 --> 00:07:06.592
元の文字列が変わらない性質のおかげで、変換前と変換後を並べて比べることも簡単です。

91
00:07:06.592 --> 00:07:07.567
まとめです。

92
00:07:07.567 --> 00:07:14.555
リプレイスオールは、一致するすべての箇所を置き換えた、新しい文字列を返すメソッドです。

93
00:07:14.555 --> 00:07:16.667
判断のポイントは三つです。

94
00:07:16.667 --> 00:07:21.867
まず、第一引数には検索文字列かジーフラグ付き正規表現を渡すこと。

95
00:07:21.867 --> 00:07:27.230
次に、第二引数には置換文字列だけでなく、計算する関数も渡せること。

96
00:07:27.230 --> 00:07:34.380
そして、正規表現にジーフラグがないとタイプエラーになり、元の文字列は変わらないことです。

97
00:07:34.380 --> 00:07:42.505
まずは記事の基本例と境界例を実行し、検索文字列を一つ変えて、結果を予測してから確かめてみてください。

98
00:07:42.505 --> 00:07:47.217
次回のリプレイスと合わせると、置換の使い分けが完成します。

99
00:07:47.217 --> 00:07:48.680
お疲れさまでした。

100
00:07:48.680 --> 00:07:54.692
小さな置換を正しく積み重ねることが、読みやすいデータ整形につながります。
