JavaScript

レシピ

正規表現

正規表現で文字列から空白を取り除く

正規表現を使って文字列に含まれる空白(スペース、タブ、改行)を削除する方法について解説します。

この記事のポイント

  • Unicodeの文字プロパティを使用して空白を検索する
  • 全件検索するためにフラグでgを指定する

目次

文字列に含まれる空白を全て取り除く

replaceメソッドと正規表現を使って、文字列の中にある空白を全て削除していきます。

次のコードでは変数testに空白を取り除く前の文字列が入っていて、取り除いた後の文字列を変数cleanに入れます。

コード例

var test = ' I like cat.\nCat \tis so pretty. ';
var clean = null;

// 空白を取り除く
clean = test.replace( /[\p{C}\p{Z}]/gu, '');

console.log(clean); // Ilikecat.Catissopretty.

replaceメソッドでは第1パラメータに空白を指定する正規表現を指定し、第2パラメータに置き換える空文字を指定します。
この指定で、文字列に空白が見つかったら空文字に置き換えて削除を行う仕組みです。

第1パラメータの正規表現をもう少し詳しく解説します。

コード例

clean = test.replace( /[\p{C}\p{Z}]/gu, '');

正規表現に記述している「\p{C}」と「\p{Z}」はUnicodeの文字プロパティです。
\p{C}」は「コントロール文字」「非可視整形用文字」などを含む「その他」の文字、「\p{Z}」は「行区切り文字」「段落区切り文字」「空白文字」などの「区切り文字」を指しています。

Unicodeの文字プロパティを使用するために、フラグに「u」を指定しているところもポイントです。
このフラグ「u」は検索ワードにUnicodeの文字プロパティを使用する明示的な指定になります。

フラグには「u」に加えて、全件検索を行う「g」も併せて指定します。
このフラグが無いときは空白が最初に1件見つかったらそこで処理を終了してしまいますが、指定があることで全ての空白に対して置き換え処理を実行することができます。

文字列の先頭と末尾にある空白のみ削除する

続いて、文字列の先頭と末尾にある空白のみを対象に削除していきます。
処理の流れは上記と共通ですが、replaceメソッドの第1パラメータに指定する正規表現が異なります。

コード例

var test = ' \nI like cat.	   \n';
var clean = null;

// 先頭/末尾の空白のみ取り除く
clean = test.replace( /^[\p{C}\p{Z}]+|[\p{C}\p{Z}]+$/gu, '');

console.log(clean); // I like cat.

空白を検索する「[\p{C}\p{Z}]」は同じものですが、今回は先頭を検索する「^[\p{C}\p{Z}]+」と、末尾を検索する「[\p{C}\p{Z}]+$」の2つに分かれます。

冒頭につく「^」は先頭を対象とする特殊文字です。
この特殊文字と先ほどの空白を組み合わせて「^[\p{C}\p{Z}]」と記述することで、文字列の先頭のみを対象にして検索することができます。
また、先頭には空白が2つ以上連続する可能性もあるため、後に「1つ以上連続する」という条件を追加する「+」を追記しています。

末尾についても基本的には考え方は同じで、「^」が「$」に置き換わることと、この記号を置く位置が「[\p{C}\p{Z}]+$」と先頭から後ろに移動しているところがポイントになります。
^」は先頭を対象とするだけに1文字目に記述しましたが、「$」は末尾を対象とするため後ろに記述します。

最後に、or検索にする特殊文字「|」を先頭を検索する「^[\p{C}\p{Z}]+」と末尾を検索する「[\p{C}\p{Z}]+$」の間に記述します。
これで、「先頭か末尾のいずれかにある空白」というor検索の指定が完成です。

先頭の空白のみ削除する

先頭と末尾の空白をどちらも削除してきましたが、正規表現を少し修正するだけで先頭の空白のみ削除する内容に変更ことができます。

コード例

var test = ' \nI like cat.	   \n';
var clean = null;

// 先頭の空白のみ取り除く
clean = test.replace( /^[\p{C}\p{Z}]+/gu, '');

console.log(clean); // I like cat.	   (末尾の空白は残る)

先ほどの正規表現からor検索の特殊文字「|」と、末尾検索の条件「[\p{C}\p{Z}]+$」を削除しているだけですが、これで先頭の空白のみを対象に削除することができるようになります。

末尾の空白のみ削除する

同じように末尾の空白のみ削除する条件に変更することも簡単にできます。

コード例

var test = ' \nI like cat.	   \n';
var clean = null;

// 先頭の空白のみ取り除く
clean = test.replace( /[\p{C}\p{Z}]+$/gu, '');

console.log(clean);
// (先頭の空白は残る)
//I like cat.

末尾検索をするための「[\p{C}\p{Z}]+$」のみ指定し、先頭検索の条件とor検索の「|」を削除します。
先頭の空白を残しつつ、末尾の空白のみ対象にして削除を実行します。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。