Regular Expressionの復習:String Method #2
先週に引き続き、Regular ExpressionとString Methodを組み合わせると何ができるか見ていこう。
今回はこちらのString Methodにフォーカスをあてる。
replace()メソッド: マッチした部分を他の文字で置き換える
search()メソッド: 最初にマッチした文字列の位置を返す
replace()メソッド
replaceメソッドを使うと以下の書き方をすることができる。
const 置換後の新しいテキスト = 元のテキスト.replace(pattern, replacement)
このときpatternに使うRegular Expressionにg(global)フラグをつけておくと、パターンに一致する部分が複数箇所あっても、全て置き換えてくれる。replaceAll()というメソッドも存在するが、replace()でgフラグ付きのregex使う場合とは結果が変わらない。
const text = "I would love to visit Australia to observe platypuses, especially one with a baby platypus.";
const pattern = /\bplatypus\w*/g; // platypusで始まる単語
const newText = text.replace(pattern, "カモノハシ");
console.log(newText);
// Output: I would love to visit Australia to observe カモノハシ, especially one with a baby カモノハシ.
search()メソッド
searchメソッドは、検索したパターンに最初にマッチした文字列が、テキストの何文字目にあるかを返す。
const text = "I would love to visit Australia to observe platypuses, especially one with a baby platypus.";
const pattern = /\bplatypus\w*/g; // platypusで始まる単語
const whereInText = text.search(pattern);
console.log(whereInText);
// Output: 43
console.log(text[whereInText])
// Output: "p"
使い道がまだピンと来ないが、マッチしないときは -1 が返ってくるので、該当が無いことの確認とかに使うのかも。
でも”p”だけじゃなくて、”p”で始まる単語を全部返してくれた方が実用性高い気がするけど、それはどうやるのかな。と思ったら先週やったmatchAllメソッドがあるじゃないか!
matchAll()メソッドの再復習
const text = "I would love to visit Australia to observe platypuses, especially one with a baby platypus.";
const pattern = /\bplatypus\w*/g; // platypusで始まる単語
const matches = text.matchAll(pattern);
for (const match of matches) {
console.log(match);
}
// Output:
//['platypuses', index: 43, input: 'I would love to visit Australia to observe platypuses, especially one with a baby platypus.', groups: undefined]
//['platypus', index: 82, input: 'I would love to visit Australia to observe platypuses, especially one with a baby platypus.', groups: undefined]
ただし、matchAll()メソッドが利用できるのはECMAScript 2020以降のバージョンのJavaScriptで、古いブラウザや環境では使用できない場合があるとのこと。古い環境では、exec()メソッドを使ってループをすれば同じ結果が得られるようなので必要に応じてどうぞ。
本日は以上!
週末にTOEICとITパスポートを受けてきました。(疲れた〜😫)
ITパスポートは試験終了後、その場で得点が表示されるのがありがたい。
合格基準を超えていたのでホッとはしたけど、答え合わせできないのがモヤモヤする。