reire
@reire (reire shake)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

正規表現について

解決したいこと

JavaScriptにおいて以下の要件を満たす正規表現について教えていただきたいです。

  1. 与えられた文字列の先頭文字が'S'の場合は2文字目以降の文字列を抽出。
  2. 与えられた文字列の先頭文字が'SS'など重複していた場合でも2文字目以降を抽出。
  3. 与えられた文字列の先頭文字が'S'でない場合はそのまま文字列全体を抽出。

特に要件の1と3が両立できずに困っております。
以下例のように処理したいです。

(例)
SFGA123456 → FGA123456
SFGA92ASB4 → FGA92ASB4
SSHJ6S85BC → SHJ6S85BC
ABC1234567 → ABC1234567

背景

Bubble.ioというノーコードプラットフォームでバーコードを読み取るWebアプリケーションを作成中、
対象のバーコードによって行頭に余計な符号「S」が付いたり付かなかったりすることが分かりました。

これではDB上でデータの整合性が取れませんので、
Inputボックスに入力された値を正規表現でチェックし必要部分のみ抽出するというアクションをはさむため上記質問に至りました。

JavaScriptでIFやsubstrすればシンプルで早いのはもちろんなのですが、
ノーコードプラットフォームである以上Bubble.io側のChangeイベントと競合すると2重登録などが発生する可能性も考えられるので、Bubble.ioの標準機能としての正規表現による文字列処理で解決する流れで考えております。

もしお分かりの方いらっしゃいましたらご回答いただければ幸いです。

0

3Answer

Comments

  1. @reire

    Questioner

    @ziopuzzle
    ご回答ありがとうございます。

    まさに求めている結果でした、ありがとうございます!
    なるほど、[^]などで先頭のSを除外する方法ばかり考えてましたが、否定先読みにより(?!^S)でマッチしたポイント以降を取得しているわけですね、勉強になりました。

仕様を満たす正規表現は他の方が既に回答しているのでそちらが参考になるかと思います。
そもそもの仕様部分で1点気になったので、逆質問となり申し訳ないですが確認させてください。

行頭に余計な符号「S」が付いたり付かなかったりとありますが、Sから始まる文字列に対しては必ずSが付与されて「SS~」となるということでお間違いないでしょうか?

1文字目のSは必ず除去する仕様となっており、例えば正しく読み取れた「SHJ6S85BC」が「HJ6S85BC」となってしまい不正な文字列となるパターンがないかが気になりました。

2Like

Comments

  1. @reire

    Questioner

    @YottyPG ご回答ありがとうございます。
    今回はバーコードから管理したい機器のシリアルナンバーを読み取っているのですが、同じ機器であっても納入元により「ABC」と「SABC」になるものが混在しているような状態です。
    (シリアルの頭数文字は機器により共通です。)

    現状としてはシリアルナンバーがSから始まる機器は存在しませんが、今後出てくる可能性がないとは言えないのでご懸念はごもっともだと思います。
    ただ、機器の全数が10,000台以上であることや複数組織、ロケーションにまたがって利用することから何かしらの運用ルールで対処するのは厳しいため、一旦アプリ側の仕様として決め打ちで除去しようという状況です。

    今後シリアルがSから始まる機器が新規で追加された際は、フラグを用意して除去不除去を判定するつもりです。
    (システムとしては最高にイケてないのですが…)

  2. 失礼いたしました。既に考慮済みで、現状はS始まりがなくいったんこの仕様でOKとなったということだったのですね。
    ご回答ありがとうございます!

自分ではどこまでコードが書けていて、どこで躓いていて、何が分かれば解決するかを、自分が書いたコートを提示して説明することはできますか?

0Like

Comments

  1. @reire

    Questioner

    @SurferOnWww
    ご回答ありがとうございます。

    質問内容にもある通り、Bubble.ioというノーコードプラットフォームを利用している関係上、
    今回質問させていただいた正規表現による抽出処理についてはコーディングで実装しているわけではありませんので、
    コードがどこまで書けているか、実際のコードを提示できるかという部分にはおそらく期待通りの回答ができかねるため控えさせていただきます。

    躓いている部分、何が分かれば、という部分に関しても質問内容にある通り、
    「与えられた文字列に対し期待通りの処理結果を返す正規表現式が書けなくて躓いており(今回は行頭の'S'を除外する正規表現式)、単にその式が分かれば解決する。」という状況になります。

Your answer might help someone💌