适用于 {{....}} 等"Surround"情况的有效正则表达式



我想取文本包围一些自定义的"括号",即:{{…}}或@(…)@

当括号只有一个字符长度时(即:{…}),它是:

/{(.*?)}/g

有一个更有效的解决方案,使用"not-end-括号"模式:

/{([^}]*)}/g

但是对于两个字符的括号,只有这个可以

/{{(.*?)}}/g

我找不到一个像单字符情况那样有效的解决方案。

有吗?

我假设您不需要担心嵌套问题。如果你需要,你不应该使用正则表达式。

这是一种不使用非贪婪匹配(*?)的方法:

/{{([^}]|}[^}])*}}/g
英语

:

  • 两个大括号
  • 一些数字:
    • non-curly-brace
    • 或大括号后跟非大括号
  • 和两个右花括号

这概括为n个花括号,有n个独立的分支,一个是非花括号,一个是非花括号,一个是非花括号,两个花括号和一个非花括号,等等。

在特殊情况下,你可以这样写:

/{{(}?[^}])*}}/g

顺便说一句:这个组可能不需要被捕获。如:

/{{(?:}?[^}])*}}/g

假设 {{...}}

var subject= "{{i am legend}}";
var pattern = /(?:{{)([wW]*)(?:}})/;
var text= subject.match(pattern)[1];

您可能需要包括转义,这取决于您选择的"括号"

最新更新