複雑な文字列パターンをマッチさせる必要がある場合はIF分ではなく正規表現を使うべきだとChat GPTが言ってた

複数の文字列に合致する可能性がある場合の処理をどう書くか考えてみた。

目次

従来

考えてみたと書いたが、そもそも従来の書き方だとどうしても汚く見えてしまうので、これを機に綺麗にしようという次第である。

で、その従来の書き方といえば、


/* 文豪がランダムで抽出される */
const targetArray = ['三島由紀夫','太宰治','夏目漱石','芥川龍之介','宮沢賢治']
const randamIndex =  Math.floor( Math.random() * targetArray.length );
const target = targetArray[randamIndex]

/* 文豪が芥川か太宰ならture */
const matchCondition = (target) => {
    return target === '芥川龍之介' || target === '太宰治'
}

console.log(target, matchCondition(target))

こんな感じ。
条件が少なければ別にいいけど、条件が多い場合はtarget === 'hoge'を沢山繋いでいく必要がある。

これをもっと綺麗にしたい。

正規表現を使いましょう

const condition = /\芥川龍之介|太宰治\b/
console.log(target, condition.test(target))

これで、わざわざtarget === 'hoge'でつなぐことなく/\芥川龍之介|太宰治\b/に文豪名を増やしていくだけで済むようになった。

Chat GPTは?

考えたコードが本当に正しいか、シンプルか、美しいかの判定ができないので、流行のChat GPTにも考えてもらった。

三島由紀夫、太宰治、夏目漱石、芥川龍之介、宮沢賢治の中の1つがランダムに抽出されるデータがあり、抽出されたデータが芥川龍之介か太宰治ならtrueを返すコードをJavascriptで書いて

こんにちは!下記がそのコードになります:

const writers = ['三島由紀夫', '太宰治', '夏目漱石', '芥川龍之介', '宮沢賢治'];
const selectedWriter = writers[Math.floor(Math.random() * writers.length)];

if (selectedWriter === '芥川龍之介' || selectedWriter === '太宰治') {
  console.log(true);
} else {
  console.log(false);
}
このコードでは、有名な作家のリスト writers が定義されています。次に、このリストからランダムに1つの作家が選択されます。最後に、選択された作家が芥川龍之介か太宰治か判定され、その結果に応じてTrueまたはFalseが出力されます。

従来のコードが返ってきた。
しかも文字から作家ってことまで理解してる…。

じゃあ、正規表現についても聞いてみた。

const writers = ['三島由紀夫', '太宰治', '夏目漱石', '芥川龍之介', '宮沢賢治'];
const selectedWriter = writers[Math.floor(Math.random() * writers.length)];
const condition = /芥川龍之介|太宰治/;

console.log(selectedWriter, condition.test(selectedWriter));

書き方が少し違う。

const condition = /\芥川龍之介|太宰治\b/
↓ Chat GPT
const condition = /芥川龍之介|太宰治/;

Chat GPTの書き方だと、

const writers = ['三島由紀夫', '太宰治', '夏目漱石', '芥川龍之介', '宮沢賢治'];
const selectedWriter = '芥川龍之介は歯車を書いた'
const condition = /芥川龍之介|太宰治/;

console.log(selectedWriter, condition.test(selectedWriter));

これでもtrueが返ってくる。ここら辺は質問の仕方によるのかしら。
人間が言葉で質問している限り、Chat GPTが必ずしも正解を返すとは限らないので、注意するべきだと肝に銘じた。

最後にChat GPTにIF分を使うべきか正規表現を使うべきか質問してみた。

これはアプリケーションによって異なりますが、通常は正規表現を使用するべきか、If文を使用するべきかは、比較的短い文字列を比較する場合はIf文を、複雑な文字列パターンをマッチさせる必要がある場合は正規表現を使用する方が良いです。
If文は単純で直感的で、判定処理の流れがわかりやすいです。正規表現は複雑な文字列パターンを扱うことができるため、文字列比較の機能を強化することができます。
つまり、文字列を比較するのに十分なIf文であれば、正規表現を使用する必要はありませんが、複雑な文字列パターンを扱う必要がある場合は、正規表現が有用です。

とのこと。
これは思っていた通りで安心した。

さっき肝に銘じたばかりなのにChat GPTと意見が一致して安心しているあたり、なんだかなといった具合。

AI、あな恐ろし。

次に読むおすすめ記事

何が面倒って、アイキャッチ画像を設定するほど面倒なことはない

JavaScriptにおけるcount++と++countの違いについて調べてみた

n の倍数で数値を丸める

Javascriptで任意の値を持つn個の配列を作成する

JavaScriptを使用してWordPressの投稿に目次を挿入する

この記事に対するコメント

お気軽にコメントを下さい

メールアドレスが公開されることはありません。 が付いている欄は必須項目です