像{{....}}这样的“环绕”情况的有效正则表达式

时间:2011-08-25 02:42:25

标签: javascript regex

我想获取被一些自定义“括号”包围的文本,即:{{...}}或@(...)@

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

/{(.*?)}/g

并且有一个更有效的解决方案,使用“not-end-bracket”模式:

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

但是对于两个特征括号,只有这个有效

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

我找不到像单字符案例那样有效的解决方案。

有没有?

2 个答案:

答案 0 :(得分:3)

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

这是一种在不使用非贪婪匹配(*?)的情况下执行所需操作的方法:

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

英文:

  • 两个花括号
  • 一些数字:
    • 非大括号
    • 或大括号后跟非大括号
  • 和两个紧密的花括号

这通过n个单独的分支来概括为n个花括号,一个用于非卷曲,一个用于卷曲和非卷曲,一个用于两个卷曲,一个用于非卷曲等。

在你的特殊情况下你可以写:

/{{(}?[^}])*}}/g
BTW:该组可能不需要捕获。例如:

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

答案 1 :(得分:1)

假设您有{{...}}

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

您可能需要包含转义,具体取决于您选择的“括号”