JavaScriptで文字列内の任意の文字を置き換える方法|正規表現とreplace()の使い方
この記事では、正規表現(RegEx)とreplace()メソッドを組み合わせて、JavaScriptで文字列内の任意の文字を置き換える方法を解説します。
問題となるシーン
たとえば、テキストの中でダッシュ(—)を使うつもりだったのに、うっかりハイフン(-)を入力してしまったとしましょう。
const textBlock =
"When you’re typing fast it’s normal to make a few spelling mistakes here and there - it just means you’re human."
素早くタイピングしていると、こうした記号の打ち間違いは誰にでも起こりえます。幸い、JavaScriptの正規表現とreplace()メソッドを使えば、この問題は簡単に修正できます。
正規表現とreplace()メソッドで置き換える
const textBlockCorrected = textBlock.replace(/-/g, "—")
console.log(textBlockCorrected)
// "When you’re typing fast it’s normal to make a few spelling mistakes here and there — it just means you’re human."
ここでポイントになるのが、正規表現の末尾にあるgフラグです。gは「global(グローバル)」の略で、これを付けることで文字列内のすべての該当箇所が置き換えられます。フラグを付け忘れると、最初に一致した1箇所しか置き換えられないので注意してください。
置き換え結果を確認する
一見すると、置き換え前後で同じように見えるかもしれません。しかし実際には、ハイフン(-)とダッシュ(—)はまったく別の記号です。よく見ると長さが異なります。
確信が持てない場合は、textBlockとtextBlockCorrectedの出力結果を並べて表示してみましょう。違いがよりはっきりと確認できます。
console.log(textBlock)
// "When you’re typing fast it’s normal to make a few spelling mistakes here and there - it just means you’re human."
console.log(textBlockCorrected)
// "When you’re typing fast it’s normal to make a few spelling mistakes here and there — it just means you’re human."
補足:フォントによって見え方が変わる
なお、タイポグラフィの観点から言うと、コード例で使用しているMenloのような等幅(モノスペース)フォントではなく、通常のプロポーショナルフォントで表示したほうが、文字や記号の違いは格段に見分けやすくなります。
emダッシュ、enダッシュ、ハイフンといった記号の違いについての詳細は、タイポグラフィに特化したチュートリアルで改めて解説する予定です。
-
JavaScriptでオブジェクト内のnull・偽値(falsy)を「-」に一括置換する方法
JavaScriptでは、多くのキーを持つオブジェクトを受け取り、その中のすべての偽値(falsy value)をダッシュ「-」に置き換える関数を実装したい場面があります。この記事では、元のオブジェクトをそのまま走査し、偽値が格納されているキーを検出して、余分なメモリを消費することなく(in-placeで)「-」に置き換える方法を解説します。JavaScriptにおける偽値(falsy)とは実装の前に、JavaScriptで条件式の中で「偽」と評価される値を確認しておきましょう。以下の6つが代表的な偽値です。false(真偽値) / (空文字列)null(意図的な「無」を表す値)undefin
-
JavaScriptで複数の文字配列から重複文字なしの全組み合わせ文字列を生成する方法
問題の概要 単一文字だけを要素とする配列が n 個あるとします。ここでは、それらの配列をすべて引数として受け取り、条件に合う文字列を生成するJavaScript関数を作成します。 関数が返すべき文字列は、次の2つの条件を満たす必要があります。 各配列からちょうど1文字ずつ取り出して構成されていること 同じ文字が2回以上登場しないこと(配列同士に共通の文字が含まれる可能性があるため) 本記事では説明のために3つの配列を使用しますが、実装する関数は配列の個数が変わっても正しく動作するよう設計します。 サンプルデータ const arr1 = [a, b, c, d]; const arr2