繁体   English   中英

获取用大括号括起来的文本,该大括号在javascript中也包含大括号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM