gpt4 book ai didi

JavaScript - RegExp - 替换字符串中无用的括号

转载 作者:行者123 更新时间:2023-11-28 19:33:27 27 4
gpt4 key购买 nike

所以我有一个像这样的字符串,准备好进行评估:

"getInfo(((((2+2)*(3/4) / ((44))))))"

所以,有 1 个地方三重括号是无用的,而 1 个地方双括号是无用的,所以字符串可以像这样简单化:

"getInfo((2+2)*(3/4) / (44))"

为了对这些不必要的括号进行排序,您只需将每 2 个无用的括号替换为 1 个括号,如下所示:

"do((((2+2 - 3)*(2))))" -> "do(((2+2 - 3)*(2)))" -> "do((2+2 - 3)*(2))"

是否有 RegExp 或循环使用 String.replace 方法来执行此操作,以及如何执行此操作?

最佳答案

这似乎有效:

function simplify(str) {
var i=0;
return (function recur(s, b) {
var c = str.charAt(i++); // Get next char
if(!c || c == ')') return s; // End of string or end of inner part
if(c == '(') {
var s1 = recur('', true), // Get inner part
s2 = recur(''); // Get following part
return s + (!b || s2 ? '('+s1+')' : s1) + s2;
}
return recur(s+c); // Continue to next char
})('');
}

此代码应该是等效的,但函数调用较少:

function simplify(str) {
var i=0;
return (function recur(b) {
var c, s = '';
while(c = str.charAt(i++)) { // Keep getting chars
if(c == ')') return s; // End of inner part
if(c == '(') {
var s1 = recur(true), // Get inner part
s2 = recur(); // Get following part
return s + (!b || s2 ? '('+s1+')' : s1) + s2;
}
s += c; // Add current char
b = false;
}
return s;
})();
}

去掉不必要的括号的部分是这个:

return s + (!b || s2 ? '('+s1+')' : s1) + s2;

基本上,它返回当前字符串,与内部部分(可能带括号)连接,与后面的部分连接。

如果后面的部分不为空,或者如果 b 为假(即,如果内部部分尚未立即包含在括号中),则内部部分将被括号括起来。

<小时/>

请注意,上面的代码需要一个格式良好的表达式。如果没有,

  • 如果有)而没有对应的(

    ,则返回的字符串将被 chop
    simplify("a)b"); // "a"
  • 如果有未闭合的(:

    ,则返回的字符串末尾会附加)
    simplify("a(b"); // "a(b)"

关于JavaScript - RegExp - 替换字符串中无用的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324995/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com