You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS正则匹配异常:WebSocket数据中\0转\u0000致提取失败

解决WebSocket数据中的1234提取问题

我来帮你搞定这个正则提取的麻烦!首先咱们先理清楚你的数据情况:你拿到的WebSocket数据是TEST|1234\0,这里的\0其实是ASCII码0对应的Unicode字符\u0000(空字符),之前的正则没匹配到预期结果,主要是没考虑这个空字符的存在。

先分析你之前的正则问题

  • 第一个正则/\|(.*?)\\/:你可能误以为数据里有字面量的\,但实际是\u0000空字符,这个正则完全没匹配到目标,所以返回null。
  • 第二个正则/\|(.*)/:它匹配了|后面的所有内容,包括1234和最后的空字符,所以结果是|1234\u0000,不是你要的纯1234。

给你两个靠谱的解决方案

方案一:精准匹配到空字符前的内容

用正则匹配|后面、空字符\u0000之前的所有字符,正则写成/\|([^\u0000]+)/,其中[^\u0000]+表示除了空字符之外的任意字符(至少一个),刚好能提取到1234:

var data = 'TEST|1234\\0'; // 实际存储为TEST|1234\u0000
var regex = /\|([^\u0000]+)/;
var matchResult = data.match(regex);
if (matchResult) {
  console.log(matchResult[1]); // 输出:1234
}

方案二:用字符串分割更直观

如果你的数据格式固定是「前缀|内容\0」,也可以不用正则,直接分割+替换,代码更易懂:

var data = 'TEST|1234\\0';
// 先按|分割取后半部分,再去掉末尾的空字符
var target = data.split('|')[1].replace('\u0000', '');
console.log(target); // 输出:1234

扩展:全局匹配多个片段

如果数据里有多个类似|内容\0的片段,把正则改成全局模式/\|([^\u0000]+)/g,用matchAll遍历所有匹配结果:

var data = 'TEST|1234\\0|USER|5678\\0';
var regex = /\|([^\u0000]+)/g;
for (const match of data.matchAll(regex)) {
  console.log(match[1]); // 依次输出:1234、5678
}

内容的提问来源于stack exchange,提问作者user630702

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:37:44