【问题标题】:Removing square brackets from string including text inside the brackets从字符串中删除方括号,包括括号内的文本
【发布时间】:2020-12-04 02:16:30
【问题描述】:

我正在尝试从字符串中删除所有方括号,包括左括号和右括号内的文本。它不应该删除未关闭的文本。

  • 示例 1:Hell[o] [W[orl]d[!! 应该是 Hell d!!
  • 示例 2:Hell[]o] [W[orl]d[!!] 应该是 Hell d

这是我的代码似乎有效:(编辑:在某些情况下它不起作用,见下文)

let text = "Hell[o] [W[orl]d[!!";
let newText = "";
let buf = "";
let isOpened = false;
for (let i = 0; i < text.length; i++) {
  const char = text.charAt(i);
  if (char === "[") {
    isOpened = true;
  }
  else if (char === "]") {
    buf = "";
    isOpened = false;
  }
  else {
    if (isOpened) {
      buf += char;
    }
    else {
      newText += char;
    }
  }
}
newText += buf;

console.log(newText);

结果:Hell d!!

我想问一下是否有比这更简单的解决方案。
理想情况下,我想避免将整个 text 复制到 newText 以获得更好的性能。

编辑:我刚刚发现我的代码不能与“Hell[]o] [W[orl]d[!!”一起正常工作。它返回Hello d!!,但它应该是Hell d!!。我该如何解决这个问题?

【问题讨论】:

  • 查看一系列示例输入/输出会很有帮助。顺便说一句,这看起来像是正则表达式的理想场景!
  • 我认为 Hell[]o] [W[orl]d[!! 返回 Hello d!! 是预期行为 - o 没有完全包裹在括号中。

标签: javascript regex string


【解决方案1】:

您可以使用正则表达式来完成此操作。正则表达式 /(?:\[.*?\]|[\[\]])/g 将起作用(通过搜索带有文本的成对括号和不成对的括号)

function stripBrackets(text) {
  return text.replace(/(?:\[.*?\]|[\[\]])/g, "")
}
console.log(stripBrackets("Hell[o] [W[orl]d[!!"));
console.log(stripBrackets("Hell[]o] [W[orl]d[!!]"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2012-01-28
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多