0128

濁流

  • 以前から不定で始めたプログラミングの筋トレ
  • ユーティリティ的に関数を書いたりするのみなので,ついでに TypeScript で書いて一緒に勉強しつつ,vitest でテストも書いてみようかなと
    • 実際 vitest 導入したが,今のところは単に関数のチェックくらいなので,jest と何も変わらんかな
    • カバレッジも出せるが他のテスティングブレームワークとほぼ一緒
    • 強いていうと,デフォルトで watch モードで起動してくれるのはありがたいかな
  • 引き続き正規表現と格闘中

    • 条件は以下のような配列から "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")

気づき

  • 正規表現の 計算時間爆発計算量爆発 を理解しないまま書いたので,その分の再起動時間ももったいなかった
  • しっかり理解して書けるようになりたい

results matching ""

    No results matching ""