我正在尝试删除字符串中的所有方括号,包括开头和结尾括号中的文本。它不应该删除未关闭的文本。
Hell d!!
Hell[o] [W[orl]d[!!
应该是Hell d
,Hell[]o] [W[orl]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] [World[!!]“中不能正常工作。它返回Hello d!!
,但应该是Hell d!!
。我怎么才能解决这个问题?
发布于 2020-12-04 02:47:49
您可以使用regex来完成这一任务。regex /(?:\[.*?\]|[\[\]])/g
将工作(通过搜索包含文本和未配对括号的两个配对括号)
function stripBrackets(text) {
return text.replace(/(?:\[.*?\]|[\[\]])/g, "")
}
console.log(stripBrackets("Hell[o] [W[orl]d[!!"));
console.log(stripBrackets("Hell[]o] [W[orl]d[!!]"));
https://stackoverflow.com/questions/65136966
复制相似问题