我想要获取由一些自定义“括号”包围的文本,即:{{...}}或@(...)@高效正则表达式适用于“环绕”状况,如{{....}}
当括号中只有一个字符的长度(即:{..}),它是:
/{(.*?)}/g
并有一个更有效的解决方案,采用“未端托架”图案:
/{([^}]*)}/g
但是对于双字符括号,只有这个作品
/{{(.*?)}}/g
我无法找到一个有效的解决方案,就像一个字符的情况。
有没有?
我想要获取由一些自定义“括号”包围的文本,即:{{...}}或@(...)@高效正则表达式适用于“环绕”状况,如{{....}}
当括号中只有一个字符的长度(即:{..}),它是:
/{(.*?)}/g
并有一个更有效的解决方案,采用“未端托架”图案:
/{([^}]*)}/g
但是对于双字符括号,只有这个作品
/{{(.*?)}}/g
我无法找到一个有效的解决方案,就像一个字符的情况。
有没有?
我假设你不需要担心嵌套。如果你愿意,你不应该使用正则表达式。
这里有一种方法做你想要什么,而无需使用非贪婪匹配(*?
):
/{{([^}]|}[^}])*}}/g
英文:
这通过具有n个单独的分支,一个用于非卷曲,一个用于卷曲并概括出到n-大括号非卷曲,一个两个花括号和非卷曲等
在你的特殊情况下,你可以只写:
/{{(}?[^}])*}}/g
BTW:该组可能不需要被捕获。例如:
/{{(?:}?[^}])*}}/g
谢谢!这使我从很多头痛中救了我:) –
我以前不知道(?:)。谢谢:) –
@劳伦斯:这是微不足道的使用模式嵌套分隔符,如[这个答案](http://stackoverflow.com/questions/4031112/regular-expression-matching/4034386#4034386)所示。你无法用DFA解决'(。+)\ 1',但这并没有阻止任何人在正则表达式中使用它。真正的问题是Javascript的模式太原始了。更糟糕的是,你无法在Javascript中使用Unicode模式匹配(每UTS#18),因为它是** [所有被调查语言中排名第一的最差的**](http://training.perl.com/ OSCON2011/index.html)用于Unicode模式匹配。即使PHP更好。 – tchrist
假设你有{{...}}
var subject= "{{i am legend}}";
var pattern = /(?:{{)([\w\W]*)(?:}})/;
var text= subject.match(pattern)[1];
您可能需要包括取决于哪个 “括号” 你选择
在大多数情况下,这比OP开始时效率要低很多*。这也是不正确的,因为它会将'{{abc}} def {{ghi}}'视为一场比赛。 –
如果有,会发生什么逃逸{{嵌套{{括号}}? }} –
目前我不需要嵌套括号。我只需要括号中的水平,一个表示变量的{..}和一个表示内部js代码的@ {..} @。这是一个简单的模板。 –