BlueprintLab Guide
JSONと正規表現、エラーになったとき最初にどこを見る?
どちらも記号1文字で結果が変わるので、勘で直すより「構文」と「意図」を分けて確認すると早くなります。
JSONも正規表現も、見た目以上に1文字が強いんです
カンマが1つ多い。引用符が片方ない。`.*`が思ったより遠くまで取っている。JSONと正規表現は、こういう小さな違いがそのまま動作の違いになります。
なので、最初から「何が悪いんだろう」と全部を見るより、まず機械が読める形か、その次に狙った意味になっているか、と2段階に分けると楽です。
JSONは、まず整形して階層を見る
1行に詰まったJSONは、人間にはかなり読みづらいです。2スペースや4スペースで整形すると、`{}`や`[]`の対応が見えやすくなります。
エラー位置が20行目と出ても、原因が20行目とは限りません。19行目のカンマが抜けていて、20行目まで来たところで「もう読めない」と判断されることがあるんですよ。エラー位置の少し前から見ます。
正規表現は「一致した」より、どこまで一致したかを見る
テスターで緑色になったら成功、ではありません。欲しい5文字のうち3文字しか取っていないかもしれませんし、その逆に後ろまで全部飲み込んでいるかもしれません。
ハイライトの開始・終了、キャプチャグループ、flagsをセットで見ます。置換に使うなら、全置換する前に置換後プレビューを見る方が安全です。
標準JSONには、コメントも末尾カンマもありません
JavaScriptのオブジェクトっぽく書いたものが、そのままJSONとは限りません。標準JSONではコメント、シングルクォート、末尾カンマは許可されません。
「ブラウザのコードでは動いたのにAPIへ送ると落ちる」というときは、JavaScript構文とJSONを混同していないかを見ると原因が見つかることがあります。
長い入力と正規表現は、速さも一度見ておく
正規表現の中には、短いサンプルでは一瞬でも、長い異常入力で急に遅くなるものがあります。外部入力へ使うなら、正常例だけでなく長い文字列も試します。
まず短いデータで正しさを確認し、そのあと実際の長さに近いデータで速度を見る。この順番にすると切り分けやすいです。
直らないときは、入力を小さくします
1000行のJSONや長い正規表現をそのまま眺めていると、どこが悪いのか分からなくなります。そんなときは、問題が再現する最小の入力まで削ります。
JSONなら怪しいオブジェクト1件だけ、正規表現ならマッチしてほしい1行と、マッチしてほしくない1行だけ。小さくすると「何を期待していたのか」まで見えやすくなります。
- 正常例を1つ
- 異常例を1つ
- 期待する結果を言葉で1行