JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript】正規表現で大文字の単語を検出し、直前にカンマを挿入する方法

大文字の前に特定の文字を挿入したいケース

文字列処理を行っていると、「文の区切りになっている大文字の単語を検出し、その直前のスペースに区切り文字(カンマなど)を挿入したい」という場面があります。

例えば、次のような文字列を考えてみましょう。各文の先頭が大文字になっていますが、文と文の間には区切りがありません。

const str = "Connecting to server Connection has been successful We found result";

この文字列に対して、すべての大文字の直前(スペースの位置)にカンマ「,」を自動的に挿入する関数をJavaScriptで作成してみます。

実装コード

ポイントは正規表現です。「任意の1文字の後に大文字が続くパターン」をグローバル検索し、replaceメソッドで置き換えます。

const str = "Connecting to server Connection has been successful We found result";

const capitaliseNew = str => {
  let newStr = '';
  const regex = new RegExp(/.[A-Z]/g);
  newStr = str.replace(regex, ',$&');
  return newStr;
};

console.log(capitaliseNew(str));

実行結果

コンソールには以下のように出力され、各大文字の前にカンマが挿入されていることが確認できます。

Connecting to server, Connection has been successful, We found result

コードの解説

仕組みを順番に見ていきましょう。

1. 正規表現パターン /.[A-Z]/g

  • . … 改行以外の任意の1文字にマッチします。ここでは「大文字の直前の文字(多くの場合スペース)」を捕捉する役割です。
  • [A-Z] … 大文字の英字1文字にマッチします。
  • g フラグ … 文字列全体から一致するすべての箇所を検索対象にします。

2. 置き換え文字列 ',$&'

  • , … 挿入したいカンマそのものです。
  • $& … マッチした部分文字列全体を参照する特殊なパターンです。これにより、元の文字(スペース+大文字)が失われることなく、その手前にカンマだけが追加されます。

つまり「server C」のようにマッチした部分が「server ,C」ではなく「server, C」として置き換わり、自然な文の区切りが完成します。

応用のヒント

同様のテクニックは、カンマ以外にもセミコロンや改行タグ(<br>)の挿入など、さまざまな整形処理に応用できます。挿入したい文字を置き換え文字列の先頭に変更するだけで動作するので、ぜひ試してみてください。

  1. JavaScriptとCSSでモーダルポップアップを作成する方法

    モーダルポップアップの作成とは、ボタンをクリックしたときに表示され、ユーザーがポップアップの外側をクリックすると自動的に閉じるダイアログボックスをWebページに追加することを指します。 モーダルポップアップの基本構成 一般的なモーダルポップアップは、以下のようにヘッダーと本文(テキスト)で構成されています。用途に応じてフッターを追加することも可能です。 CSSとJavaScriptによる実装コード CSSとJavaScriptを使ってモーダルポップアップを作成するには、次のコードをそのままHTMLファイルに貼り付けてブラウザで開いてみてください。 サンプルコード <!DOCTYPE h

  2. JavaScriptとSVGを使ってスクロールに合わせて線を描画する方法

    ページをスクロールすると、それに連動してSVGのパスが少しずつ描かれていく演出は、JavaScriptのgetTotalLength()メソッドと、stroke-dasharray・stroke-dashoffsetプロパティを組み合わせることで実現できます。 基本的な仕組みは以下の通りです。 getTotalLength()でパスの全長を取得する stroke-dasharrayとstroke-dashoffsetを同じ長さに設定し、初期状態では線を見えなくする スクロール量を取得し、その割合に応じてstroke-dashoffsetの値を減らしていくことで、線が徐々に描画される 実装コ