AIに正規表現を頼むなら!「一致する例・しない例」を添えよう

AIロボットと制作者が、一致する例と除外する例のカードを確認するイラスト

「このファイル名に合う正規表現を作って」とAIに頼んだら、一見よさそうなのに、余計な文字列まで引っかかる。そんなときは、一致してほしい例と、一致させたくない例をセットで渡すのがおすすめです。

「似ているけど違う例」が、条件を伝えてくれる

正規表現は、文字列のパターンを指定して検索や判定をするための書き方です。たとえば「news-001.jpgのような名前」とだけ伝えると、数字は何桁か、大文字も含むか、文字列の一部にあればよいのかが曖昧ですよね。

そこで、条件の境目になる例も用意します。次は、画像ファイル名をJavaScriptで判定するための、この記事独自のプロンプト例です。

次の条件を満たす正規表現を、JavaScript用に作ってください。
文字列全体が一致した場合だけ true にしたいです。

条件:news- に続く半角数字3桁と、小文字の .jpg のみ。
大文字、前後の文字や空白、改行は許可しません。
フラグは付けません。

一致する例:
news-001.jpg
news-999.jpg

一致しない例:
news-01.jpg
news-0001.jpg
news-001Xjpg
old-news-001.jpg
news-001.JPG
news-123.jpg

正規表現と各記号の説明、上の全例を確認できる
JavaScriptコードを出してください。
実行していない結果は、実行済みと書かないでください。

ポイントは、「ダメな例」を適当に増やすことではありません。桁数が1つ違う、大文字になっている、ドットの場所に別の文字がある。こうした小さな違いを入れると、何を区別したいのかを具体的に伝えられます。

返ってきた式は、自分でも動かしてみよう

この条件なら、次のように書けます。これは記事用に用意し、動作を確認した例です。

const pattern = /^news-[0-9]{3}\.jpg$/;

console.log(pattern.test("news-001.jpg")); // true
console.log(pattern.test("news-01.jpg")); // false
console.log(pattern.test("news-001Xjpg")); // false

^ と $ は文字列の先頭と末尾、[0-9]{3} は半角数字3桁を指定します。\. はドットそのものです。ここではフラグを付けず、大文字小文字も区別しています。test() は一致すれば true、一致しなければ false を返します。

使う場所と、追加の境界ケースも忘れずに

JavaScript、PHP、エディタの検索欄など、使う場所によって書き方や指定できる機能が異なります。AIには「どこで使うか」も伝えましょう。

また、AIが「全例OK」と答えても、それだけで検証完了にはしません。実際の利用環境で、前後の空白や末尾の改行なども試してみてください。例を全部通っても、想定していない入力まで正しく扱える保証にはなりません。

ファイル名のチェックや検索用パターンを相談するときは、まず「通したい例」と「通したくない例」を数個ずつ。短い一覧が、曖昧な説明を補ってくれます。

参照:MDN:RegExp.prototype.test()、MDN:入力境界アサーション ^・$。プロンプト例は当記事で作成しています。