保持外部括号匹配而不重复内部图案

时间:2018-02-15 03:24:40

标签: javascript regex

如何重写此正则表达式/\[.+\]|\{.+\}/但不重复内部模式/.+/

必须匹配:

  • [ABC]
  • {ABC}

不得匹配:

  • [ABC}
  • {ABC]

1 个答案:

答案 0 :(得分:1)

在正则表达式中,您可以.+非贪婪.+?。当贪婪时,这将从此字符串中的开头[a到结束b]匹配:

[abc] {a} [b]

如果没有.+.+?,您可以使用\[[^[\n]+?]|{[^{\n]+?}替代。

这将匹配:

\[       # Match [
[^[\n]+? # Match not [ or a newline one or more times non greedy
]        # match ]
|        # Or
{        # Match {
[^{\n]+? # Match not { or a new line one or more times non greedy
}        # match }

如果这只是abc左右,您可以使用\[abc]|{abc}

当在regex101.com上运行两个正则表达式并选择prce时,它们会给出相同数量的执行步骤,所以我认为这不会更快。

\[.+?\]|\{.+?\}

\[[^[\n]+?]|{[^{\n]+?}