我知道如果你向 String 的 match 方法传递一个正则表达式,它就可以了。但问题是如何编写这样的正则表达式。
涉及字符串的描述:
1. Skeleton:
字符串的结构如下:
'UNION(xxx,xxx,xxx,xxx,...)'
2. xxx:
'xxx'部分类似于
'DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), SELF)' ,或
'DESCENDANTS("U0EXMDAW", FILTER(DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), ALL), "name"= "adf"), ALL)'。
DESCENDANTS 字符串可能包含多个像其自身一样的 DESCENDANTS 字符串。 DESCENDANTS 字符串的结构类似于 'DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), SELF)'。
现在的问题是如何从联合字符串中去掉“xxx”部分?
输入:
'UNION(DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), SELF),DESCENDANTS("U0EXMDAW", FILTER(DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), ALL), "名称"= "adf"), ALL))'
输出:
['DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), SELF)', 'DESCENDANTS("U0EXMDAW", FILTER(DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), ALL), "name"= "adf"), ALL)']
最佳答案
也许一些正则表达式更适合,但我认为小型解析器就足够了。
string = 'UNION(DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), SELF),DESCENDANTS("U0EXMDAW", FILTER(DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), ALL), "name" = "adf"), ALL))';
s = string.substring(6, string.length -1); //we strip out the 'union' and its parentheses
//Let's parse the children
children = [];
depth = 0;//number of parentheses we pass
while( s.length) {
var i =0;
for(i; i < s.length; i++) {
if(s[i] == "(") {
depth++;
}
if(s[i] == ")") {
depth--;
}
if(s[i] == "," && depth == 0) {
break;
}
}
children.push(s.substring(0, i));
s = s.substring(i+1);
}
console.log(children); // ['DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), SELF)', 'DESCENDANTS("U0EXMDAW", FILTER(DESCENDANTS("U0EXMDAW", MEMBERS("U0EXMDAW"), ALL), "name" = "adf"), ALL)']
参见 fiddle https://jsfiddle.net/me1k8tbt/1/
关于javascript - 如何去掉字符串的某些部分并将主题放入数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35122047/