Method1(para1,para2,Method2(para3,Method3(para3,para4,para5),para5),para6)
上面方法1有四个参数,用都好分隔开,第三个参数是方法,切该方法第二个参数又是方法,现在我们想要提取方法1的参数,也就是para1, para2, Method2(para3,Method3(para3,para4,para5),para5) , para6
这四个参数,如果我们仅仅是分割逗号符,肯定是不行的,因为有些参数又是方法,它还有多参的情况,这时我们需要考虑的就有两个方面:
1 根据逗号分割,
2 格局括号来匹配完整的参数(参数为方法,方法带有括号)。
我的思路如下:提取参数:para1,para2,Method2(para3,Method3(para3,para4,para5),para5),para6
按逗号分割,分割结果如下:
para1 para2 Method2 (para3 Method3 (para3 para4 para5) para5) para6
然后遍历分割后的数组里的字符串,如果不包含“(”,直接取出(因为参数肯定是以“(”开始的,所以不需要考虑“)”,肯定是匹配的。),如果包含左括号,就让当前字符串与下一个字符串相加,然后计算得到字符串中的左右括号是否匹配,如果匹配则取出,如果不匹配则继续加上下一个字符串,再次几所是否左右括号匹配,以此轮推。这样就能取出所有的参数;
代码:
(累加法匹配左右字符串)
function parenthesisMatching(str) {
var flag = 0;
for (var i = 0; i < str.length; i++) {
if (str.charAt(i) === "(") {
flag++;
}
if (str.charAt(i) === ")") {
flag--;
}
}
if (flag === 0) {
return true;
} else {
return false;
}
}
(计算方法参数)
function getParas (methondText){
var par = [];
var methondText= str.split(",");
for (var t = 0; t < params.length; t++) {
if (params[t].charAt("(") < 0) {
par.push(params[t]);
} else {
var text = params[t];
while (!parenthesisMatching(text)) {
text = text + "," + params[++t];
}
par.push(text);
}
}
return par;
}
此时,par中就是我们的方法参数;
["para1" ,"para2" ,"Method2(para3,Method3(para3,para4,para5),para5" ,"para6" ]
经过项目验证,如下的Excel formulas 也可以正常提取参数:
=TRIM(REPT(INDEX(n_1,1+INT(A2/10^8))&" hundred",10^8<A2)&IF(A2-TRUNC(A2,-8)<2*10^7,INDEX(n_1,1+MID(TEXT(A2,"000000000"),2,2)),INDEX(n_2,1+MID(TEXT(A2,"000000000"),2,2)/10)&INDEX(n_3,1+RIGHT(INT(A2/10^6))))&REPT(" million",10^6<A2)&IF(--RIGHT(INT(A2/10^5)),INDEX(n_1,1+RIGHT(INT(A2/10^5)))&" hundred","")&IF(A2-TRUNC(A2,-5)<2*10^4,INDEX(n_1,1+MID(TEXT(A2,"000000000"),5,2)),INDEX(n_2,1+MID(TEXT(A2,"000000000"),5,2)/10)&INDEX(n_3,1+RIGHT(INT(A2/10^3))))&IF(--MID(TEXT(A2,"000000000"),4,3)," thousand","")&IF(--RIGHT(INT(A2/100)),INDEX(n_1,1+RIGHT(INT(A2/100)))&" hundred","")&IF(MOD(A2,100)<20,INDEX(n_1,1+RIGHT(A2,2)),INDEX(n_2,1+RIGHT(A2,2)/10)&INDEX(n_3,1+RIGHT(A2))))