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