从字符串中提取函数参数的工具函数
有更简便的方法请留言
parseFunctionParam('abs((0.0 - 0.0 ) < 0 ,通过,不通过)','CONDITION')
function parseFunctionParam(template, functionName){
// template 指源字符串 functionName要处理的函数,从template中提取functionName的参数
// template中 函数名后紧跟左括号
//采用类似堆栈的方式实现
let startIndex = template.indexOf(functionName)
let functionNameLength = functionName.length
let chartStart = startIndex + functionNameLength
let index=chartStart+1;
// 防止嵌套公式
let listArray = []
listArray.push('(')
// 匹配成对括号 防止嵌套
while (index < template.length && listArray.length >0) {
// 循环条件
let charV = template.charAt(index)
if (charV !== '(' && charV !== ')') {
listArray.push(charV)
} else if (charV === '(') {
listArray.push(charV)
} else if (charV === ')') {
// 如果是右边的括号 就从数组中弹出
while (listArray.length > 0) {
let topChar = listArray.pop()
// 如果是左括号就跳出
if (topChar === '(') {
break
}
}
if (listArray.length == 0) {
break
} else {
index++;
continue
}
}
index++
// while循环结束
}
let paramStr = template.substring(startIndex + functionNameLength + 1, index)
console.log(paramStr)
return paramStr
}