JavaScriptには対象の文字列からパターンにマッチする内容を抜き出したり、変換・置換する便利なメソッドが用意されています。
指定した文字列や数値を抜き出す/変換・置換するメソッド
主なメソッドは次の4つになります。
メソッド | 内容 |
---|---|
match | 指定したパターンにマッチする文字列を返す |
replace | 指定したパターンにマッチする文字列を置換する |
replaceAll | 指定したすべての文字列を置換する |
split | 指定した文字列やパターンで区切って配列を返す |
matchメソッド
matchメソッドを使うと、指定した正規表現(パターン)に一致する結果を配列として出力します。
対象が存在しない場合は空の配列が返ります。
基本構文
str.match(regexp)
引数のパターンは /パターン/か、new RegExpで生成した正規表現のオブジェクトを指定します。
最初に一致するものを抜き出す
引数に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"
注意点
gオプションがないと、最初の一文字のみを消去するだけになってしまいます。
str = "大切な番号は★1234★です。"
str.replace(/[^0-9]/, "")
#出力
"切な番号は★1234★です。"
空白(スペース)を消す
replaceメソッドを使って空白(スペース)を消すことが簡単にできます。
すべての空白スペース\s
を""
に置換します。
replace(/\s/g, "")
実例
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を返す |
lastIndexOf | indexOfの逆検索。indexOfは前方から検索するのに対し、後方から検索する |
search | 指定したパターンに一致したインデックス番号を返す。マッチしない場合は-1を返す |
test | 指定したパターンに一致するものがあればtrueを返す |
それぞれのメソッドの使い方と実例は下記をご参考ください。