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:入力境界アサーション ^・$。プロンプト例は当記事で作成しています。
