[英]Getting text enclosed by curly brackets that also contain curly brackets in javascript
我有一个包含文本字符串的textarea,我将其值获取到名为updatestring
的变量。 我正在此文本区域中获得由update(){
和}
包围的文本。 此文本进入变量updatecode。
var updatestring = 'update(){\n//logic code here...\n\n\n}\n' ;
var updatecode = updatestring.match(/update\(\)\{([^}]+)\}/)[1];
我的问题是,我希望有可能update(){
和}
包含的文本也包含}
字符。 在JavaScript中,有没有不使用库就可以做到这一点的简便方法?
编辑: torazaburo的答案更好,但是我将在这里留出这仅仅是为了教育目的而显示另一种方式。 ;)
试试这个:/[ /[^{]*{((?:.|\\r|\\n)*)}/
:.| /[^{]*{((?:.|\\r|\\n)*)}/
例如: https : //regex101.com/r/QOIyvz/4
[^{]*
-跳过所有字符,直到找到{
并在其之前停止。
{
-匹配第一个大括号。
((?:.|\\r|\\n)*)
- ?:
启动非捕获组(恕不退还)和*
“贪婪”匹配所有的字符,回车和换行,并使其所有部分返回的捕获组中的一个(在另一个(
和之间)
。
}
-正则表达式将停止贪婪搜索以匹配找到的最后一个。
Example: updatestring.match(/[^{]*{((?:.|\r|\n)*)}/)[1]
贪婪匹配(这是*
的默认行为)将跳过中间的}
字符直到最后一个字符,因此不需要特殊的操作:
var updatestring = 'update(){\\n//logic {embedded curly brackets}code here...\\n\\n\\n}\\n' ; var regexp = /{([^]*)}/; // ^ match starting curly // ^^^^^^ capture // ^^^ any character including newline // ^ any number of times // ^ match ending curly var regexp = result = updatestring.match(regexp)[1]; console.log(updatestring, result);
[^]
将匹配所有内容,包括换行符。
顺便说一句,为什么要尝试使用regexp解析类似于JavaScript的内容?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.