簡體   English   中英

JavaScript RegExp:匹配忽略嵌套括號的所有特定字符

[英]JavaScript RegExp: match all specific chars ignoring nested parentheses

實際上我需要用whitespaces分割這一行,忽略括號中的whitespaces (可以嵌套):

var string = 'a b c(a b c) d(a (b) c)'

進入這個數組:

['a', 'b', 'c(a b c)', 'd(a (b) c)']

我的任務的本質是獲取由空格分隔的所有變量和函數調用的列表

因此,按空格分割,括號中的所有內容都應該被忽略

我理解如何提出這樣的問題是無神的,但是當涉及到正則表達式時,我完全是愚蠢的,如果是這樣的話,准備等待開始賞金)Thx)

也許它應該是這樣的:

string = 'a b c(a b c) d(a (b) c)'.relaceWhitespacesinParentheses('&wh;')

// 'a b c(a&wh;b&wh;c) d(a&wh;(b)&wh;c)'

string.split(' ')

// ['a', 'b', 'c(a&wh;b&wh;c)', 'd(a&wh;(b)&wh;c)']

接下來的一切都很明顯

 var str = 'abd(a (b) c) c(abc) e(a (ft(oai) ) ) '; str = str.trim(); var result = []; var open_bracket = 0; var curr_str = ''; for (var i = 0; i < str.length; ++i) { if (str.charAt(i) === '(') open_bracket++; if (str.charAt(i) === ')') open_bracket--; if (str.charAt(i) == ' ') { if (open_bracket == 0 && curr_str != '') { result.push(curr_str); curr_str = ''; } else if (open_bracket > 0) { curr_str += str.charAt(i); } } else { curr_str += str.charAt(i); } } result.push(curr_str); // to include the last matched token. console.log(result); 

我們逐個字符地移動字符串。 當我們找到一個空格時,我們會通過檢查是否有任何括號打開來查看是否需要在結果中容納它。 如果是,我們將它附加到我們的臨時結果curr_str ,否則,我們將當前的curr_str添加到我們的結果中。

如果最多有一個嵌套級別,您可以嘗試這種模式

 var str = 'abc(abc) d(a (b) c)'; var res = str.match(/\\w+\\([^)(]*(?:\\([^)(]*\\)[^)(]*)*\\)|\\S+/g); console.log(res); 

您需要在模式中添加每個級別的深層嵌套。 例如,最多兩個級別fyi )。

也許是這樣的? 可能有一個更整潔的方式

 var string = 'abc(abc) d(a (b (abc) d) c)' var split = string.split(' ') var numberOfBrackets = 0 var elements = [] split.reduce(function (acc, cur) { if (cur.includes('(')) {numberOfBrackets++} if (cur.includes(')')) {numberOfBrackets--} if (numberOfBrackets !== 0) { return acc + ' ' + cur } else { elements.push((acc + ' ' + cur).trim()) } return '' }, '') console.log(elements) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM