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

以下作品:

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

按照这个规则

更新:{}根据@jkshah 的有用评论结合了两种选择。

于 2013-11-11T07:03:15.183 回答