47957


before

[code]

    (A[0-9])|(B[0-9]b)
    
[/code]

これを`or(|)`を使わないでまとめて記述して`A1`、`B2b`のような文字列にマッチするようにできるでしょうか？

after

[code]

    ([AB][0-9]b?)
    
[/code]

のように記述すると、beforeではマッチしない`A1b`のような文字列にマッチしてしまいます。  
（`[0-9]`がもっと複雑な正規表現の場合にafterのような感じでまとめて書けるなら記述も処理も効率的になるかと思い、質問させていただきました。）


CC BY-SA 4.0
2018-08-31T02:01:56.333
47956
2018-08-31T23:30:52.987
2018-08-31T03:04:48.837
3060
24431
question
正規表現
正規表現で、or（｜）を使った記述を、orを使わないで一つにまとめて記述したい。


正規表現はエンジンごとに使える機能が異なります。質問のような特殊なマッチとなると、正規表現エンジンごとに可否が分かれたり、表記が異なったりします。  
特定の正規表現エンジンに関する質問であれば、質問文に明記願います。

参考までにC#言語等で利用可能な[.NETの正規表現](https://docs.microsoft.com/ja-
jp/dotnet/standard/base-types/regular-expressions)ですと[有効なキャプチャ
グループに基づく条件一致](https://docs.microsoft.com/ja-jp/dotnet/standard/base-
types/alternation-constructs-in-regular-expressions#conditional-matching-
based-on-a-valid-captured-group)が使えます。

[code]

    ((?:(A)|B)[0-9](?(2)b?|))
    
[/code]

これではわかりづらいので名前付きグループを使用すると

[code]

    (?<all>(?:(?<a>A)|B)[0-9](?(a)b?|))
    
[/code]

でしょうか。

* * *

> javascriptでは不明。

残念ながら[JavaScriptの持つ正規表現](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions)にはそのような機能はありません。


CC BY-SA 4.0
2018-08-31T02:30:55.300
47957
2018-08-31T23:30:52.987
2018-08-31T23:30:52.987
4236
4236
47956
answer