我正在尝试从字符串中删除所有方括号,包括开头和结尾方括号内的文本。它不应删除未关闭的文本。
Hell[o] [W[orl]d[!!
应该Hell d!!
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!!
。我怎样才能解决这个问题?
您可以使用正则表达式来完成此操作。正则表达式/(?:\[.*?\]|[\[\]])/g
将起作用(通过搜索带有文本的成对括号和不成对括号)
function stripBrackets(text) {
return text.replace(/(?:\[.*?\]|[\[\]])/g, "")
}
console.log(stripBrackets("Hell[o] [W[orl]d[!!"));
console.log(stripBrackets("Hell[]o] [W[orl]d[!!]"));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句