如何删除 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 端点的 extract
或 extract_html
字段:https://en.wikipedia.org/api/rest_v1/page/summary/Russia.
注意:虽然它旨在删除大部分发音,但并不是盲目删除所有括号。例如。您不想删除所有括号,尤其是。当涉及到复杂的化学式时。此外,保留括号内的单个单词。
我正在从维基百科获取一些数据,它有一些内容在括号内,我想删除括号内的所有内容。当括号是单个时,我可以使用 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 端点的 extract
或 extract_html
字段:https://en.wikipedia.org/api/rest_v1/page/summary/Russia.
注意:虽然它旨在删除大部分发音,但并不是盲目删除所有括号。例如。您不想删除所有括号,尤其是。当涉及到复杂的化学式时。此外,保留括号内的单个单词。