const str = 'a+b*(d-e)*c+(((b+a)+f)+g)'let current = 0, res = [];function test() { let letter = str[current]; if (letter === '(') { if(str[++current] === "("){ letter = str[current] } else { letter = ''; } while (current <str.length && str[current] !== ')') { if(str[current] === '('){ letter += test(); } letter += str[current]; current++; } res.push(letter); return letter } current++ }while(current <str.length){ test()}console.log(res)
function findParenthesesContent (str) { let doList = []; let doneList = []; for (let i = 0; i < str.length; i++) { let d = str[i]; if (d === ')') { let o = doList.pop(); o && doneList.push(o); } doList = doList.map(k => k + d); if (d === '(') { doList.push(''); } } return doneList;}window.console.log(findParenthesesContent('a+b*(d-e)*c+(((b+a)+f)+g)'));
不考虑效率的话,可以把最小单位的(x+y)给依次替换为/1、/2..../n,然后逐一恢复;
const str = 'a+b*(d-e)*c+(((b+a)+f)+g)';const getExpressions = (str) => { const recover = (item) => { [tmp, index] = item.match(/\/(\d+)/) || []; return item = tmp ? recover(item.replace(tmp, ans[index])) : item; } const reg = /\([^\(\)]+\)/; let ans = []; let index = 0; while (match = str.match(reg)) { ans.push(match[0]); str = str.replace(match[0], `/${index++}`); } console.log(ans); // ['(d-e)', '(b+a)', '(/1+f)', '(/2+g)'] return ans.map(item => recover(item));}console.log(getExpressions(str)); // ['(d-e)', '(b+a)', '((b+a)+f)', '(((b+a)+f)+g)']
希望帮助到你;
a = 'a+b*(d-e)*c+(((b+a)+f)+g)'r = /\([^)]+/result = [];temp = [];time = 0;do { // RegExp 过滤() time += 1 temp = r.exec(a); if(temp){ a = a.slice(temp.index + temp[0].length); let len = temp[0].split(/\(/).length - 1; // 单层正常的正常输出 if(len === 1){ a = a.slice(1); result.push(temp[0] + ')'); console.log(result, len) // 多层的取前X层 }else{ let text = a.split(')').slice(len - 2).join(')'); a = a.slice(text.length); result.push(temp[0] + ')' + text); console.log(result, len) } }} while (time < 10 && temp)// 输出 result = ['(d-e)', '(((b+a)+f)+g)']
function extractSubExpressions(str: string): string[] { const stack: number[] = []; const subExpressions: string[] = []; for (let i = 0; i < str.length; i++) { if (str[i] === "(") { stack.push(i); } else if (str[i] === ")") { if (stack.length === 0) { throw new Error("Invalid expression: Incorrect bracket placement"); } const startIndex = stack.pop()!; const subExpression = str.substring(startIndex, i + 1); const replaceStr = subExpression.substr(1,subExpression.length-2) subExpressions.push(replaceStr); } } if (stack.length !== 0) { throw new Error("Invalid expression: Unclosed brackets"); } return subExpressions;}const str = 'a+b*(d-e)*c+(((b+a)+f)+g)';const result = extractSubExpressions(str);console.log(result); // ['d-e', 'b+a', '(b+a)+f', '((b+a)+f)+g']
这段代码看起来是在试图解析并找出字符串中的所有括号内容。不过,这段代码并不完全正确,因为它没有正确处理嵌套括号的情况。例如,在字符串 '(((a+b)+c)+(d+e))'
中,它只能正确处理到 'a+b'+c
这部分,然后就无法继续处理了,因为它遇到了嵌套的括号 (d+e)
。
如果你想要找出括号中的所有内容,一个更好的方法是使用递归下降解析或者正则表达式。不过,正则表达式可能对处理复杂的数学表达式有困难,所以我们可以使用递归下降解析。
下面是一个使用 JavaScript 的递归下降解析的例子,用于找出字符串中括号内的内容:
const str = 'a+b*(d-e)*c+(((b+a)+f)+g)';const mathExpression = /[\+\-*\/(\d\s\+\s\d)()]/g;let result = [];let temp;while ((temp = mathExpression.exec(str)) !== null) { let start = temp.index; let end = start + temp[0].length; let content = str.slice(start, end); result.push(content); str = str.slice(0, start) + str.slice(end);}console.log(result);
这个代码段将会找出所有括号和括号内的内容。它通过正则表达式 [\+\-*\/(\d\s\+\s\d)()]
找到所有包含加、减、乘、除运算以及括号的字符组合,然后通过 String.prototype.slice()
方法来截取出每一个括号及其内容,然后将它们添加到结果数组中。
有时,项目中的许多广为流传的惯例和协定变得非常重要,你需要记录下来。为了保证这种文档的正统性,要清楚的表明这些内容基于邮件列表的讨论,并已经形成协定开始生效。随着你的编写,应当引用邮件列表归档中的相关讨论,对于任何不能确定的要点,要重新询问并确认。文档中不应当包含任何出其不意的东西:它不应当是协议的来源,而只是对于协议的描述。当然,如果它足够成功,人们会开始引用它来作为自己权利的来源,但是这只是说
我试图在外类声明的括号(泛型)中插入一个私有类,并得到下一个错误:“com.example.gridrecyclerview.RecycleViewAdapter。VieHolder在com.example.gridrecyclerview.RecyclViewAdapter中有私有访问权限” 将内部类更改为公共类时,一切正常。谁能给我解释一下这个问题吗。附件代码:
这里我理解哈希(#)符号将定义为本地模板变量,但是前面的星号是什么意思呢?还有,有必要吗? 下面是使用括号的示例: 我有点理解周围的括号将它绑定到HTML属性/Angular指令。这是否意味着它们是Angular计算表达式的指针?就像是Angular 1中的的等价物? 我猜真正的问题是,这些符号在Angular 2中有特殊的含义吗,知道何时使用每一个的最简单的方法是什么?谢谢!!
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)
结果必须是:匹配0=6207匹配1=6204... 希望你能帮助我,谢谢。
问题内容: 我正在学习JavaScript,并且在浏览jQuery库时发现(冒号)被大量使用。这在JavaScript中有什么用? 问题答案: 在功能上等同于