0128
濁流
- 以前から不定で始めたプログラミングの筋トレ
- ユーティリティ的に関数を書いたりするのみなので,ついでに
TypeScript
で書いて一緒に勉強しつつ,vitest
でテストも書いてみようかなと- 実際 vitest 導入したが,今のところは単に関数のチェックくらいなので,
jest
と何も変わらんかな - カバレッジも出せるが他のテスティングブレームワークとほぼ一緒
- 強いていうと,デフォルトで watch モードで起動してくれるのはありがたいかな
- 実際 vitest 導入したが,今のところは単に関数のチェックくらいなので,
引き続き正規表現と格闘中
- 条件は以下のような配列から
"hoge"
キー,"fuga"
キーの値を任意の文字列に置換する
[ { ..., "hoge": { ... }, "fuga": { ... }, ... }, // 以下、上記の形式のオブジェクトの繰り返し ];
- まぁ正直配列なので,
map
メソッドで特定のキーに来たら特定の文字列で置き換えればいいだけなので楽勝だが,正規表現で VSCode などのエディタの置換機能で一発でやりたい - 以下,正規表現の格闘の履歴
"hoge":\s\{\s*[\n\s\S]*\}[,\n\s]*[,\n]?\s{4}"fuga" "hoge":\s\{\s*[\n\s\S]*\}[,\n\s{1,}]?"fuga"?(?!"fuga":\s") "hoge":\s\{[\s\S\n]*\},\n\s{1,}"fuga":\s\{ "hoge":\s\{[\s\S\n]*\},\n\s{1,}"fuga":\s\{[\s\S\n]*\},\n\s{1,} (?<="hoge":\s)[.\n\s\S]*(?="fuga")\}, (?="fuga")\s{1,}\}, ("hoge":\s\{[.*\n]?\}),\s*"fuga" (?<="hoge":\s)\{[^}\n]* "hoge":\s\{(?:[^\{\}]|(?R))*\},\s*"fuga" (?<="hoge":\s\{)[\s\S]*(?=\},\s{1,}"fuga") (?<="hoge":\s\{)[.\n\s\S]*(?=,\n\s{1,}"fuga":\s\{)
- もう正直わからん.ChatGPT にも何度も聞いて考えたがわからん.
- ただ勉強にはなった.肯定先読み,肯定後読みを組み合わせて特定の文字列 - 今回だと
"hoge"
と"fuga"
- の間の文字列を抽出して置換できないか? - あかん.もう敗北を認めてスクリプトでやったほうが良いかも.人生の時間の浪費感出てきた
- 今回は諦める
- ちなみに,1つのオブジェクトだけなら以下で行ける
(?<="category":\s)\{[\n\s\S]*\}(?=,\s*"adPattern")
- 条件は以下のような配列から
気づき
- 正規表現の
計算時間爆発
や計算量爆発
を理解しないまま書いたので,その分の再起動時間ももったいなかった - しっかり理解して書けるようになりたい