gpt4 book ai didi

javascript - 正则表达式:如何返回不在括号中的匹配项

转载 作者:行者123 更新时间:2023-12-03 07:12:47 25 4
gpt4 key购买 nike

所以我在技术上已经解决了这个问题,但我希望使用一些时髦的正则表达式找到更好的解决方案。

问题是:我们得到了这样的字符串:

2+{2+(2)},

10+(20+2)+2

目标是匹配不在任何括号中的“加号”。即在前面的字符串中它应该匹配

2 + {2+(2)} ,

10 + (20+2) + 2

目前我正在做的是匹配所有加号,然后检查该符号前面是否有括号(使用正则表达式),如果有则删除它。

我希望有一个更简洁的正则表达式解决方案,这可能吗?

重申一下,我需要字符串的位置,目前我正在使用 javascript 来执行此操作,因此理想情况下首选 js 解决方案,但该模式确实是我正在寻找的。

最佳答案

您也许可以将 (){} 中的所有内容替换为空格:

'10 + (20+2) + 2'.replace(/\([^)]*?\)|\{[^}]*?\}/g, m => ' '.repeat(m.length));

这会导致

10 +        + 2

意味着字符串的位置没有改变。

注意:它不能很好地处理相同类型的嵌套事物,例如 (1 + (1 + 1) + 1),但它可以与 (1 + { 1 + 1 } + 1)

<小时/>

更大的解决方案,使用相同的逻辑,但适用于嵌套内容

var input = '10 + { 1 + (20 + (1 + { 3 + 3 } + 1) + 2) + 2 }';

var result = [];
var opens = 0;
for (var i = 0; i < input.length; ++i) {
var ch = input[i];
if (/\(|\{/.test(ch)) {
opens++;
result[i] = ' ';
}
else if (/\)|\}/.test(ch)) {
opens--;
result[i] = ' ';
}
else {
if (!opens) result[i] = input[i];
else result[i] = ' ';
}
}

result = result.join('');
// "10 + "

关于javascript - 正则表达式:如何返回不在括号中的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36561831/

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