Open5

コードをディグるときに書いた、ちょっと凝った正規表現を集める

ピン留めされたアイテム
晴れ井戸晴れ井戸

正規表現芸人を目指してネタを集める

簡単な解説も添えますが、気軽さ重視で投稿していきます

お気に入りの正規表現があればぜひお寄せください コメントも大歓迎

環境

  • VSCodeで検索しています
  • TypeScript, Reactなプロジェクトが多いです
  • プロジェクト全体のコードは整形済みであることを前提にしています
晴れ井戸晴れ井戸

Jotaiのatomを定義している箇所を全部ひっかける

 =\n?\s+(?!use)\w*atom
  • = の直後に改行していることもある
  • hookは関心の外なのでuseを除外している
  • atomFamilyhogeAtom も引っかかります
晴れ井戸晴れ井戸

JSXの記述以外が50行以上あるReact関数コンポーネントを探す

^\S.*\{(\n(?!\}).*){50,}\n  return
  • Reactコンポーネントじゃないものも引っかかる
  • 分割可能な部分を探すため
  • インデントがスペース2文字である前提
晴れ井戸晴れ井戸

const 名前 = アロー関数function 名前 関数定義 に置換する

検索
const ([A-Z]\w+) = (?!\w)([^\0]*?) => \{\n??
置換
function $1$2 {
  • アロー関数で定義していたJSXコンポーネントをfunctionで書き直すためのもの
  • 最後の \n?? はVSCodeで複数行を対象に検索するときのおまじない
    • 検索クエリのどこかに改行 \n が入っているとき、複数行にわたるマッチができる
  • [^\0] は改行文字も含めて全ての文字を表す