如何删除 javascript 中双括号内的内容

How to remove content inside double parenthesis in javascript

我正在从维基百科获取一些数据,它有一些内容在括号内,我想删除括号内的所有内容。当括号是单个时,我可以使用 content.replace(/\s*\(.*?\)\s*/g, '') 删除数据,但对于某些数据,括号是双括号和三括号。请帮助我获得预期的输出。

输入

Russia ( ( listen); Russian: Росси́я, tr. Rossíya, IPA: [rɐˈsʲijə]) officially the Russian Federation

预期输出

Russia officially the Russian Federation

我现在得到的输出

Russia; Russian: Росси́я, tr. Rossíya, IPA: [rɐˈsʲijə]) officially the Russian Federation

试试这个

var text = "Russia ( ( listen); Russian: Росси́я, tr. Rossíya, IPA: [rɐˈsʲijə]) officially the Russian Federation"

console.log(text.replace(/\s*\(.*\)/,''));

另一种幼稚的方法(这里我只去掉括号,不去掉空格)。

var str = "Russia ( ( listen); Russian: Росси́я, tr. Rossíya, IPA: [rɐˈsʲijə]) officially the Russian Federation";
    var output = str.substring(0,str.indexOf("(")) + str.substring(str.lastIndexOf(")")+1,str.length);
    console.log(output);

您不能使用 JS 正则表达式匹配嵌套的括号。 Hare 是完成这项工作的基本解析器代码:

var str = 'Russia ( ( listen); Russian: Росси́я, tr. Rossíya, IPA: [rɐˈsʲijə]) officially the Russian Federation (Russian: Российская Федерация, tr. Rossiyskaya Federatsiya, IPA: [rɐˈsʲijskəjə fʲɪdʲɪˈratsɨjə]), is a sovereign country in Eurasia. At 17,125,200 square kilometres (6,612,100 sq mi)';

var result = '';
var lvl = 0;
for (var i = 0, len = str.length; i < len; i++) {
  var ch = str.charAt(i);
  if (ch == '(')
    lvl++;

  if (lvl == 0)  
    result += ch;

  if (ch == ')')
    lvl--;
}

console.log(result.replace(/\s{2,}/g, ' '));

这可能是一个很长的答案。但逻辑适用于任何情况。

var text = "Russia ( ( listen); Russian: Росси́я, tr. Rossíya, IPA: [rɐˈsʲijə]) officially the (soviet) Russian Federation"

function replaceParenthesis(text) {

  var counter = 0,
    startIndex = 0,
    endIndex = 0,
    parts = [],
    output = text;

  for (var i = 0; i < text.length; i++) {
    if (text[i] === "(") {
      if (counter == 0) {
        startIndex = i;
      }
      counter++;
    } else if (text[i] === ")") {
      counter--;
      if (counter == 0) {
        endIndex = i + 1;
        parts.push(text.substring(startIndex, endIndex));
      }
    }
  }

  parts.forEach(function(part) {
    output = output.replace(part, '');
  });

  return output;

}

console.log(replaceParenthesis(text));

最简单的解决方案是为此使用摘要 REST 端点的 extractextract_html 字段:https://en.wikipedia.org/api/rest_v1/page/summary/Russia.

注意:虽然它旨在删除大部分发音,但并不是盲目删除所有括号。例如。您不想删除所有括号,尤其是。当涉及到复杂的化学式时。此外,保留括号内的单个单词。