2

正規表現に 2 つの省略可能な部分が必要です。どちらも一致する文字列で見つけることができ、両方を同時に見つけることもできます。

これらのオプション部分はどちらもワイルドカードで構成されています (.*ここに書きましたが、言うことができます。とにかく、貪欲なマッチングが適用される場合[a-zA-Z]+、正規表現の 2 番目の部分 ( ) がワイルドカードと一致することがポイントです)。Bar

これは、次の Firebug 出力で最もよく示されています。

>>> /(Foo.*)?(Bar.*)?/.exec("FooAA")
["FooAA", "FooAA", undefined] // OK

>>> /(Foo.*)?(Bar.*)?/.exec("BarAA")
["BarAA", undefined, "BarAA"] // OK

>>> /(Foo.*)?(Bar.*)?/.exec("FooAABarAA")
["FooAABarAA", "FooAABarAA", undefined] // I'd like to have ["FooAABarAA", "FooAA", "BarAA"]

上記の 3 つのテスト ケースに一致する正規表現を作成する方法はありますか?

私はsthのように使うことができます

/((Foo.*)(Bar.*))|(Foo.*)?(Bar.*)?/.exec("FooAABarAA")

しかし重複は避けたい。

4

3 に答える 3

4

貪欲でないワイルドカードが必要です。これは私のために働く:

/^(Foo.*?)?(Bar.*?)?$/
于 2013-07-29T16:56:11.863 に答える
2

次のように、最初のワイルドカードを非貪欲にすることができるはずです。

/(Foo.*?)?(Bar.*)?/
于 2013-07-29T16:57:59.130 に答える