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