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

标签 javascript regex

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

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

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/

相关文章:

python - 从 python 中的以下字符串中提取值的最佳方法?

javascript - 文件名的正则表达式字符串模式

php - 请帮我获取 $randomQ 和 $matchinA,然后在输入 $matchinA 时刷新 jQuery?

javascript - 编辑 IndexedDB 示例

javascript - 我如何解析从模型传输到 JavaScript 的日期值?

javascript - 需要用JavaScript进行批量文件上传

php: 从字符串的开头修剪 br 标签?

XML 模式上的 Java 字符串替换

regex - 捕获快速正则表达式的方法

javascript - 如何访问函数返回的数组中的数据?