Open5
コードをディグるときに書いた、ちょっと凝った正規表現を集める
ピン留めされたアイテム
正規表現芸人を目指してネタを集める
簡単な解説も添えますが、気軽さ重視で投稿していきます
お気に入りの正規表現があればぜひお寄せください コメントも大歓迎
環境
- VSCodeで検索しています
- TypeScript, Reactなプロジェクトが多いです
- プロジェクト全体のコードは整形済みであることを前提にしています
Jotaiのatomを定義している箇所を全部ひっかける
=\n?\s+(?!use)\w*atom
-
=
の直後に改行していることもある - hookは関心の外なのでuseを除外している
-
atomFamily
やhogeAtom
も引っかかります
JSXの記述以外が50行以上あるReact関数コンポーネントを探す
^\S.*\{(\n(?!\}).*){50,}\n return
- Reactコンポーネントじゃないものも引っかかる
- 分割可能な部分を探すため
- インデントがスペース2文字である前提
50行以上の波括弧ブロックを探す
^\S.*\{(\n(?!\}).*){50,}\n\}
- 「JSXの記述以外が50行以上あるReact関数コンポーネントを探す」と最後の部分以外同じ
- 分割可能な部分を探すため
const 名前 = アロー関数
を function 名前 関数定義
に置換する
検索
const ([A-Z]\w+) = (?!\w)([^\0]*?) => \{\n??
置換
function $1$2 {
- アロー関数で定義していたJSXコンポーネントをfunctionで書き直すためのもの
- 最後の
\n??
はVSCodeで複数行を対象に検索するときのおまじない- 検索クエリのどこかに改行
\n
が入っているとき、複数行にわたるマッチができる
- 検索クエリのどこかに改行
-
[^\0]
は改行文字も含めて全ての文字を表す