【JavaScript】指定した文字列や数値を抜き出す/変換・置換する方法(正規表現を使った便利なメソッド一覧)|

javascript-prograshi(プロぐらし)-kv JavaScript
記事内に広告が含まれていることがあります。

JavaScriptには対象の文字列からパターンにマッチする内容を抜き出したり、変換・置換する便利なメソッドが用意されています。


指定した文字列や数値を抜き出す/変換・置換するメソッド

主なメソッドは次の4つになります。

メソッド内容
match指定したパターンにマッチする文字列を返す
replace指定したパターンにマッチする文字列を置換する
replaceAll指定したすべての文字列を置換する
split指定した文字列やパターンで区切って配列を返す


matchメソッド

matchメソッドを使うと、指定した正規表現(パターン)に一致する結果を配列として出力します。

対象が存在しない場合は空の配列が返ります。

基本構文

str.match(regexp)

引数のパターンは /パターン/か、new RegExpで生成した正規表現のオブジェクトを指定します。

regexpとは?

regexpとは、正規表現(パターン)を指定するオブジェクトです。作成方法は2つあります。

  1. /パターン/
  2. new RegExp('パターン')

/パターン/

/ /で囲むことで正規表現のオブジェクトであることを指定します。

/[0-9]/

new RegExp(‘パターン’)

RegExpクラスからインスタンスを生成します。

number = new RegExp('[0-9]')


最初に一致するものを抜き出す

引数にgオプション(グローバルオプション)なしのパターンを指定すると、一番最初に一致する文字列を返します。

str.match(/パターン/)

他にも、インデックス番号、対象の文字列、グループといった情報が返ります。

戻り値内容
検索文字列0番目の値として返ります
indexマッチした文字列のインデックス番号
input検索対象の文字列
group名前付きキャプチャグループのオブジェクト

実例

str = "大切な番号は★1234★です。"
str.match(/[0-9]/)

#出力
["1", index: 7, input: "大切な番号は★1234★です。", groups: undefined]


▼パターンを変数として渡すこともできます

str = "大切な番号は★1234★です。"

regexp = /[0-9]/
str.match(regexp)

#出力
["1", index: 7, input: "大切な番号は★1234★です。", groups: undefined]


一致するものをすべて抜き出す

引数にgオプション(グローバルオプション)を指定すると、一致するものを全て抜き出します。

str.match(/パターン/g)

実例

str = "大切な番号は★1234★です。"
str.match(/[0-9]/g)

#出力
 ["1", "2", "3", "4"]


大文字と小文字を区別しない

通常のパターンマッチングは大文字と小文字を区別します。

引数にiオプション(グローバルオプション)を指定すると、大文字と小文字を無視することができます。

str.match(/パターン/i)

gオプションと併用することもできます。

str.match(/パターン/gi)

実例

str2 = "Apple or apple OR APPLE"
str2.match(/a/ig)

#出力
 ["A", "a", "A"]


▼iオプションを付けない場合

str2 = "Apple or apple OR APPLE"
str2.match(/a/g)

#出力
 ["a"]


完全一致のみ抽出

パターンの前に前方一致を指定する^を、後ろに後方一致を指定する$を記述すると、完全一致したときのみ抽出します。

str.match(/^パターン$/)

実例

str2 = "Apple or apple OR APPLE"
str2.match(/^A.*E$/)

#出力
["Apple or apple OR APPLE", index: 0, input: "Apple or apple OR APPLE", groups: undefined]


▼完全一致しない場合はnullを返します

str2 = "Apple or apple OR APPLE"
str2.match(/^A.*e$/)

#出力
null


最短マッチ

通常パターンを指定すると、検索文字列の中で一致する一番長い文字列を取得します。

(.+?)を使うと最短マッチで、一番最初に一致した内容を抜き出します。

最短マッチする場合

str2 = "Apple or apple OR APPLE"
str2.match(/A(.*?)e/g)

#出力
["Apple"]

最短マッチしない場合

str2 = "Apple or apple OR APPLE"
str2.match(/A.*e/g)

#出力
["Apple or apple"]


replaceメソッド

replaceメソッドを使うと、指定した正規表現(パターン)に一致する内容を、指定した値に置換することができます。

基本構文

replace(正規表現, 置換後の文字列)

一致するすべての文字列を置換する場合はgオプションをつけます。

実例:gオプション無し

str = "大切な番号は★1234★です。"

#出力
"大切な番号は◎1234★です。"

実例:gオプションあり

str = "大切な番号は★1234★です。"

#出力
"大切な番号は◎1234◎です。"


数値のみ抜き出す

replaceメソッドを使って数値のみを抜き出すことも簡単にできます。

数値以外のすべての文字(\D または [^0-9])を何もなし""に置換します。

replace(/\D/g, "")

実例

str = "大切な番号は★1234★です。"
str.replace(/\D/g, "")

#出力
"1234"


以下も同じ処理です。

str = "大切な番号は★1234★です。"
str.replace(/[^0-9]/g, "")

#出力
"1234"
tips

正規表現において、文字列の前に^をつけると前方一致になりますが、角カッコ[ ]の中の最初につけると以外という意味になります。

  • [0-9]は数値という意味です。
  • [^0-9]は数値以外という意味になります。

また、[0-9][^0-9]などよく使うパターンを特殊な記号で置き換えることもできます(メタ文字といいます)

  • [0-9] は \d と同じです。
  • [^0-9] は \D と同じです。

(Windowsの\マークはMacのバックスラッシュと同じです)

注意点

gオプションがないと、最初の一文字のみを消去するだけになってしまいます。

str = "大切な番号は★1234★です。"
str.replace(/[^0-9]/, "")

#出力
"切な番号は★1234★です。"


空白(スペース)を消す

replaceメソッドを使って空白(スペース)を消すことが簡単にできます。

すべての空白スペース\s""に置換します。

replace(/\s/g, "")
tips

正規表現ですべての空白を表すメタ文字は\sです。

これは[ \t\f\r\n]と同じです。

メタ文字内容
半角スペース
\tタブ
\f改ページ
\r改行。CR型
\n改行。LF型

実例

str = "大 切  な   番    号  は ★ 1 2 3 4 ★ で     す   。"
str.replace(/\s/g, "")

#出力
"大切な番号は★1234★です。"


置換後に文字列を連結する

+を使うとreplaceの置換結果に文字列をつなげることができます。

replace(正規表現, 置換後の文字列) + "文字列"


実例

str = "大切な番号は★1234★です。"
str.replace(/\D/g, "") + "【置換完了】"

#出力
"1234【置換完了】"


replaceAllメソッド

replaceAllメソッドを使うと、指定した文字列に一致する内容をすべて置換することができます。

repalceメソッドの簡易版のようなものです。

基本構文

replaceAll('検索したい文字列', '置換後の文字列')

実例

str = "大切な番号は★1234★です。"
str.replaceAll("★", "◎")

#出力
"大切な番号は◎1234◎です。"


パターンで指定する

replaceのようにパターンで指定することもできます。その場合、replaceと同じくgオプションが必須です。gオプションを付けない場合はエラーになります。

(正規表現で指定する場合にreplaceAllを使うメリットは特にありません。)

replaceAll('検索したい文字列', '置換後の文字列')

実例

str = "大切な番号は★1234★です。"
str.replaceAll(/★/g, "◎")

#出力
"大切な番号は◎1234◎です。"

gオプションがないとエラーになる

str = "大切な番号は★1234★です。"
str.replaceAll(/★/, "◎")

#出力
Uncaught TypeError: String.prototype.replaceAll called with a non-global RegExp argument
    at String.replaceAll (<anonymous>)
    at <anonymous>:1:5


splitメソッド

splitメソッドは指定した文字列やパターンを区切り位置として配列を返します。

文字列で指定する場合

str.split("区切りたい文字列"[, 上限数]])

第2引数で上限数を指定すると、戻り値の配列の中身は指定した数になります。

実例(上限数の指定なし)

str = "大切な番号は★1234★です。"
str.split("★")

#出力
 ["大切な番号は", "1234", "です。"]

実例(上限数の指定あり)

str = "大切な番号は★1234★です。"
str.split("★", 1)

#出力
 ["大切な番号は"]


パターンで指定する場合

str.split(正規表現[, 上限数]])

第2引数で上限数を指定すると、戻り値の配列の中身は指定した数になります。

実例(上限数の指定なし)

str = "大切な番号は★1234★です。"
str.split(/★/)

#出力
 ["大切な番号は", "1234", "です。"]

実例(上限数の指定あり)

str = "大切な番号は★1234★です。"
str.split(/★/, 1)

#出力
 ["大切な番号は"]


1文字ずつ分解する

splitの引数で空文字””を指定した場合は、1文字づつ区切ります。

str.split("")

実例

str = "大切な番号は★1234★です。"
str.split("")

#出力
 ["大", "切", "な", "番", "号", "は", "★", "1", "2", "3", "4", "★", "で", "す", "。"]


指定した文字列を含むか調べる便利なメソッド

指定した文字列を含むか調べる主なメソッドは以下の6つがあります。

メソッド内容
starsWith指定した文字列で始まる場合にtrueを返す
endsWith指定した文字列で終わる場合にtrueを返す
indexOf指定した文字列が開始するインデックス番号を返す。マッチしない場合は-1を返す
lastIndexOfindexOfの逆検索。indexOfは前方から検索するのに対し、後方から検索する
search指定したパターンに一致したインデックス番号を返す。マッチしない場合は-1を返す
test指定したパターンに一致するものがあればtrueを返す

それぞれのメソッドの使い方と実例は下記をご参考ください。


参考リンク

タイトルとURLをコピーしました