1

サンプル文字列を見てみましょう:

"Hello @{MATCH 1} My @[MATCH 2] Wonderful #{MATCH 3} World"

次の正規表現が登録されていると仮定します。

[/@\{.+\}/, /@\[.+\]/, /#\{.+\}/]

私が必要とするのは、正規表現が次の一致を返すことです:

["Hello ", "@{MATCH 1}", " My ", "@[MATCH 2]", " Wonderful ", "#{MATCH 3}", " World"]

現在私がしているのは、登録された正規表現を「|」で結合してコンパイルすることです '.+?' を結合します。最後にパターン。次のようになります。

/@\{.+\}|@\[.+\]|#\{.+\}|.+?/g

ただし、これは次の一致を返します。

["H", "e", "l", "l", ..., "@{MATCH 1}", " ", "M", ..., "@[MATCH 2]", ...]

追加の処理を実行する必要があるだけで、現在の一致に対応できます。ただし、これだけの数の一致が返されることによるパフォーマンスへの影響が心配です。私が望む一致を返すためのより良い正規表現を知っている人はいますか? パターンは動的に登録できることに注意してください。ありがとう!

4

1 に答える 1

1

以下の作品:

([@#]\{[^}]+\}|@\[[^\]]+\]|[^@#]+)

このRubularあたり

更新: {}@jkshah の有益なコメントに従って、2 つの代替案を組み合わせました。

于 2013-11-11T07:03:15.183 に答える