得出一个表达

Mod*_*inu 5 javascript regex arrays substring

假设我有这两个例子

  1. (A = 1)和(B = 2)
  2. (A = 1)(B = 2()).

我需要一种方法来获得以下数组:

  1. [(],[A][=][1],[)],[and],[(],[B],[=],[2],[)]
  2. [(],[A][=][1],[)],[(],[B],[=],[2],[(],,[)][)]

我试图做的是以下内容

使用以下函数查找分隔符(在这种情况下,分隔符是空格" " and any brackets ())

 function findExpressionDelimeter (textAreaValue){
    var delimiterPositions = [];
    var bracesDepth = 0;
    var squareBracketsDepth = 0;
    var bracketsDepth = 0;

    for (var i = 0; i < textAreaValue.length; i++) {
        switch (textAreaValue[i]) {
            case '(':
                bracketsDepth++;
                delimiterPositions.push(i);
                break;
            case ')':
                bracketsDepth--;
                delimiterPositions.push(i);
                break;
            case '[':
                squareBracketsDepth++;
                break;
            case ']':
                squareBracketsDepth--;
                break;
            default:
                if (squareBracketsDepth == 0 && textAreaValue[i] == ' ') {
                    delimiterPositions.push(i);
                }
        }
    }
    return delimiterPositions;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试循环返回的值并使用substring提取值.问题是,当我有一个(或者)我需要获得下一个子串以及括号时.这是我被困的地方.

    function getTextByDelimeter(delimiterPositions, value) {
            var output = [];
            var index = 0;
            var length = 0;
            var string = "";

            for (var j = 0; j < delimiterPositions.length; j++) {

                if (j == 0) {
                    index = 0;
                } else {
                    index = delimiterPositions[j - 1] + 1;
                }

                length = delimiterPositions[j];


                string = value.substring(index, length);
                output.push(string);
            }
            string = value.substring(length, value.length);
            output.push(string);
            return output;
        }
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

Qta*_*tax 1

您可以只匹配您感兴趣的令牌:

var str = "(A = 1) and ( B = 2)";
var arr = str.match(/[()]|[^()\s]+/g);
Run Code Online (Sandbox Code Playgroud)

结果:

["(", "A", "=", "1", ")", "and", "(", "B", "=", "2", ")"]
Run Code Online (Sandbox Code Playgroud)

带有一些注释的正则表达式:

[()]     # match a single character token
|        # or
[^()\s]+ # match everything else except spaces
Run Code Online (Sandbox Code Playgroud)

如果您想添加更多单字符标记(例如 a )=,只需将其添加到两个字符类中即可。IE:[()=]|[^()=\s]+