Mod*_*inu 5 javascript regex arrays substring
假设我有这两个例子
我需要一种方法来获得以下数组:
[(],[A][=][1],[)],[and],[(],[B],[=],[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)
任何帮助,将不胜感激.
您可以只匹配您感兴趣的令牌:
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]+