javascript - 如何去掉字符串的某些部分并将主题放入数组中?

标签 javascript regex string pattern-matching

我知道如果你向 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/

相关文章:

Java正则表达式在多个目录中查找文件

javascript - Web 浏览器中的等高线图

javascript - Eloquent JavaScript 第 4 章

c# - ClassName.PropertyName 的正则表达式

c - 初学 C 程序员在使用字符串函数时遇到问题

javascript - split 导致尾端丢失

java - 如何在 Java 中比较字符串?

javascript - 视觉 : Selecting an option while setInterval is firing

javascript - 在 Javascript 中调用它之前确保嵌套对象值存在的最佳方法

python - 流中的 findall/finditer?