我想取文本包围一些自定义的"括号",即:{{…}}或@(…)@
当括号只有一个字符长度时(即:{…}),它是:
/{(.*?)}/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];
您可能需要包括转义,这取决于您选择的"括号"