少し前に記事のファイル名を日付にした。とにかく楽だが、たまに明示的なファイル名にしたいこともある。下書きをHTMLで書いており、記事タイトルはh1要素にしているので、それにid属性としてファイル名を仕込み、公開スクリプト側で処理してやることにした。

id属性がない下書きは日付がファイル名になるので、楽をしたい時は楽できる。最近の記事は指定したので、URLがかっこよくなった。id属性の値に日付追加してやると情報量が増え、ユーザーには少し便利になりそうだ。また、ファイル名の競合を考えなくてすむ。しかし、短い方が好みなことと、ファイル名を日付にする前の書式との整合性を考えてやめておいた。


const line = '<h1 id="foo">Test</h1>';
const [
  ,
  id,
  title
] = line.match(/<h1(?: id="(.*?)")?>(.*?)<\/h1>/u);

ファイル名はこのような正規表現で拾っている。非キャプチャリング・グループを作ったり、配列で受けて不必要なマッチ全体を捨てたり、無駄に複雑な気配がある。もっとうまく分割してタイトルとファイル名を切り出した方がいいかもしれない。

const line = '<h1 id="foo">Test</h1>';
const [
  ,
  attr,
  title
] = line
  .replaceAll(">", "<")
  .split("<");
const [
  ,
  id
] = attr.split('"');

「>」を「<」に全置換してから「<」で分割すると、開始タグの中身とタイトルが切り出せる。更に開始タグの中身を「"」で分割すると、id属性の値、つまりファイル名が切り出せる。id属性がない場合に怪しいコードだが、ちゃんと(?)idundefinedになる。正規表現を追放できるものの、かなり強引だ。