在JavaScript中从字符串中移除空字符

41

如何在NodeJS中从字符串中删除空字节?

MyString\u0000\u0000\u00000

我尝试过string.replace('\0', '');,但好像不起作用。有没有适合操作字符串的Node.js包?


1
你尝试过使用.trim()吗? - kpull1
是的,似乎也不起作用。 - majidarif
可能是重复的问题:如何从字符串中删除 \u0000? - Lucas Zamboulis
3个回答

74

它可以工作,但是这样只会移除一个空字节的实例。你需要使用正则表达式和修饰符g来实现。

var string = 'MyString\u0000\u0000\u0000';
console.log(string.length); // 11
console.log(string.replace('\0', '').length); // 10
console.log(string.replace(/\0/g, '').length); // 8

哦,没错,我也注意到了。为什么会发生这种情况呢?尝试了你的解决方案,确实有效。但这是唯一的方法吗?不管怎样,我可以在7分钟内接受。 - majidarif
3
.trim()的作用是删除空格,而不是控制字符。因此,更好的选择是使用.replace()。如果你想获得类似于trim的行为,可以使用类似于string.replace(/^\0+/, '').replace(/\0+$/, '')的方法。这将保留字符串中间的\0。但我很难想象这种情况有什么意义。 - akirk
1
这是在研究与开发中头痛了4个小时后的福音,值得的。: D - TheCleverIdiot

18

以下正则表达式可以将空字节及其后面的内容从字符串中删除。

string.replace(/\0.*$/g,'');

要在JavaScript中剪切掉所有null的右侧(或任何其他字符,只需编辑正则表达式),您可能希望执行类似于此的操作。

string.replace(/\0[\s\S]*$/g,'');

例如:

var a = 'a\0\0test\nnewlinesayswhat!';
console.log(a.replace(/\0[\s\S]*$/g,''));

输出'a'。

经过深思熟虑后,如果您确定null将在字符串中出现,使用带有substr的索引可能更好。

a.substr(0,a.indexOf('\0'));

或者一个检查是否不确定的函数。

function trimNull(a) {
  var c = a.indexOf('\0');
  if (c>-1) {
    return a.substr(0, c);
  }
  return a;
}

1
请执行 .replace(/\0.*$/, "") 命令。g 标志是多余的;这个指令只需要匹配一次就能去掉它。 - Константин Ван

0

您还可以检查字符代码并使用它来过滤掉空字节。

function removeNullBytes(str){
  return str.split("").filter(char => char.codePointAt(0)).join("")
}

console.log(removeNullBytes("MyString\u0000\u0000\u00000"))

它记录了MyString0,因为您在最后一个空字节之后放置了额外的0,并且您只提到想要删除空字节本身。

此帖子中的其他答案将消除空字节后的所有内容,这可能是所需的行为,也可能不是。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接