LoginSignup
18
31

More than 1 year has passed since last update.

正規表現と仲良くなって使いたい技。文字列変換からフォーマット変更、パスワードチェック、住所分割まで

Last updated at Posted at 2021-05-01

freecodecamp のJavaScript講座

JavaScript Algorithms and Data Structures Certification | freeCodeCamp.org

を続ける中JavaScriptのアルゴリズムだ正規表現だで時々これ良いねというものに出会うので書き溜めていました。こういうことをしたいときにこれが使えそうというものが出てくるのです。

便利な正規表現

文字列を - でつなぐ 等

記事のタイトル文字列などをうまく - で接続してファイル名にする等。

"Hello World".toLowerCase().trim().split(/\s+/).join("-");
"HELLO WORLD".toLowerCase().trim().split(/\s+/).join("-");
" hello world  ".toLowerCase().trim().split(/\s+/).join("-");

→ いずれも hello-world

" Hello World 2021.04.30 ".toLowerCase().trim().split(/\s+/).join("-");

→ いずれも hello-world-2021.04.30

"HelloWorld".replace(/([a-z])([A-Z])/g, "$1 $2").toLowerCase().trim().split(/\s+|_+/).join("-");

→ ケバブケースも hello-world
他、ついでに見つけたので以下も参照。

  • 全角文字検索
  • キャメルケースからスネークケース
  • スネークケースからキャメルケース
  • フルパスからファイル名を取り出す

他バリデーション。

日付や通貨等のフォーマットを変更する

$1 $2 という分け方を覚えたところで以下。

"今日は2021年4月30日、明日は2021年5月1日です。".replace( /(\d+)(\d+)(\d+)日/g , "$1/$2/$3" );

今日は2021/4/30、明日は2021/5/1です。

"今日は2021年4月30日、明日は2021年5月1日です。".replace( /(\d+)(\d+)(\d+)日/g , "$2/$3($1年)" );

今日は4/30(2021年)、明日は5/1(2021年)です。

パスワード要件をチェックする

以上のところくらいまで分かると、業務アプリでも使いそうな以下など。

例) 半角英数字8文字以上100文字以下

/^[a-z\d]{8,100}$/i
let password = "abc123";
let checkPass = /(?=\w{3,6})(?=\D*\d)/;
checkPass.test(password);

で「3文字から6文字で少なくとも数字を含む」。

以下もメモ。

住所を「都道府県/市区町村/それ以降」に分ける

...で更にのめり込むとこんな大作が作れる。スゴイ。

以下引用。

(...??[都道府県])((?:旭川|伊達|石狩|盛岡|奥州|田村|南相馬|那須塩原|東村山|武蔵村山|羽村|十日町|上越|富山|野々市|大町|蒲郡|四日市|姫路|大和郡山|廿日市|下松|岩国|田川|大村)市|.+?郡(?:玉村|大町|.+?)[町村]|.+?市.+?区|.+?[市区町村])(.+)

正規表現チートシート

ここまで書いておいて何だが、実際のところ実用時は忘れている気しかしない...。
結局チートシートを頼りにしています。この正規表現どういう意味なんだっけ、というチェックツールも必須。

サルにもわかる正規表現入門

おまけ

君たちは正規表現におけるインド数字の罠にハマったことはあるかい?(١٢٣٤٥٦٧٨٩) - Qiita

追記しておく。
以上、参考になればさいわいです。

18
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
31