RegExpって何?[JavaScript]

JavaScript&php

文字列のマッチとか正規表現とかを検索するとちょくちょく出てくる”RegExp”という単語。今になってそういう意味なのね。となんとなく分かってきたので簡単にまとめてみる。

RegExpは正規表現のオブジェクト

”RegExp”は正規表現のオブジェクト。これを知らなかったためにいろいろこんがらがっていたけど、なんてことはない。調べる気になって調べればすぐ出てくる。

参考MDN↓

RegExp - JavaScript | MDN
RegExp オブジェクトは、テキストをパターンと照合するために使用します。

苦手意識ってよくないよね。。。

例えば下記のような変数定義があったとする。

const regexp = /hoge/;

よく分かっていない時は、「/hoge/っていう文字列をregexpという変数に格納しているんだな。」なんて思っていたけど、実は落とし穴で。

上記のコードは下記のように書き換えることができる。

const regexp = new RegExp("hoge");

そう。/hoge/は文字列ではなくて、RegExpクラスからオブジェクトを生成するよ〜。という意味だった。

そしてRegExpクラスから生成されたオブジェクトは正規表現オブジェクトになるのであった!!

簡単まとめ
  • RegExpクラスから正規表現オブジェクトを生成することができる。
  • new RegExp(“hoge”);は/hoge/;と省略して記述ことができる。(//で囲むと正規表現オブジェクトになる)

どういう時に使う?

オブジェクトなので使うとすればメソッドを使うことが主だと思いますが、自分はtestメソッドで文字列のマッチングを行うことが多いです。

例えば、

const str = "hoge";
const regex = /ge/;
console.log(regex.test(str));      // =>true

みたいな感じです。

このtestメソッドは正規表現オブジェクトだから使えるメソッドですので、regexにただの文字列が格納されていれば使うことはできません。

ぽんきち
ぽんきち

メソッドって??

クラスの中には最初からいくつかの関数が定義されていて、オブジェクトが生成される時、それらの関数が使える状態でセットされ、生まれてきます。

その関数は好きなタイミングで呼び出して使うことができます。そういった関数のことをメソッドと呼びます。

生まれた時から唱えるだけで魔法が使える異世界転生物の主人公がオブジェクトで、メソッドがその魔法みたいなものですね。となるとクラスは異世界転生システムですかね。

正規表現オブジェクトなのでもちろん正規表現も使えます。

例えば、

const regex = /[0-9]+/;
console.log(regex.test("123"));  // => true

※[0-9]+は0から9までの文字が1個以上。という意味。

応用編

わざわざ変数に格納しなくてもそのまま使うこともできます。

console.log(/[0-9]+/.test("123"));  // => true  

ここまでくると逆によく目にするような構文になっているのではないでしょうか。

そうなんです!(何が?笑)

「正規表現は//で囲もうね〜。」と伝えられているのは、//で囲むことによって正規表現オブジェクトを生成しているのです。

なのでその後に.test()とか.match()とか繋げてもコンピュータが読み取ってくれるんですね。

あーもやっと解消。

まあそれはいいですけどもっと正規表現を使いこなせるようになりたいですね。笑

コメント

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