文字列の中にある数字からゼロ埋めを除去してみる

色々書いてますが最終的に私は以下の正規表現で解決させました

(?<!\d\.*)0+(?=\d)+

「1」でも「01」でも同じ結果を返したい。数字以外が入ってる可能性もある文字列から

JavaScriptを書いている際に単純な数字ではなく文字列の中にある数字からゼロ埋めを除去したいケースが発生しました。(数字だけならNumber()で解決)
ちょっと調べた限り以下の記事が参考になりそうだったのでまずはこちらから正規表現を拝借…

0埋めされた数字を、正規表現を用いて0埋めなしに変換する方法
システム等によって登録された固定長の数字は先頭が「0」で埋められている場合があります。 例えばこのようなものです。 1 ⇒ 00110 ⇒ 010 数字を固定長の文字列として扱う理由は様々ですが、システムによっては金額などが0埋めされている

※正規表現チェックには「正規表現チェッカー」を使用させて頂いてます
https://weblabo.oscasierra.net/tools/regex/

2行目のケースはバッチリゼロを抽出できていますが1行目のケースはできていない。
今回1行目のケースでも引っかかって欲しかったのですが「\b」は単語の境界にマッチするもの。「aiueo0012~」は境界がないのでこれではゼロ検出できません……

先読みを使ってみる

それじゃあゼロの後が数字かどうか見れば良いですね。

文字の中のゼロが検出できましたこれでオッケー……

オッケーじゃない

……オッケーならよかったのですが「0120030」などの数字の中の連続したゼロまで引っかかりました。
これだとゼロ埋め除去で数字が破壊されてしまいます。とても困る。

後読みも使ってみる

正規表現には後読みの肯定、否定も指定できるので連続したゼロの前が数字でない場合に限定してみます。

かなり適当に文字を打ち込んでみた限りでは問題なさそうです。

実際に置き換えを行ってみましたがちゃんと抽出されたゼロが削除されているので多分大丈夫…

数字の中に少数がある場合

文字列の中に少数が入る場合、今のままでは少数点直後のゼロが消えてしまいます。

これは後読み指定に少数点を追加すれば少数点後は無視してくれるようになります

これで(たぶん)オッケー

最終的に

(?<!\d\.*)0+(?=\d)+

以上の正規表現で文字列内のゼロ埋めを抽出してあとはreplaceとかすれば空白に置き換えられそうです。

……これ、ちょっと調べれば出てきそうだったんですけどなかなか見つからなかったんですよね。こんなん調べなくてもできるやろ的な感じなのかもしれません。もっとシンプルにできるとか間違ってるとかあったら誰か教えてください……

コメント