You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

正则拆分字符串后数组中转义空引号元素无法过滤的问题求解

问题分析与解决方法

首先,我们来拆解你的问题根源:

1. 数组元素的实际值并非你看到的"\"\""

你的正则表达式/[^\s"]+|"([^"]*)"/gi在匹配""时,捕获组([^"]*)会捕获到空字符串,所以myArray里对应的元素其实是""(空字符串)。你看到的"\"\""大概率是调试工具的转义显示,或者你混淆了HTML实体和JS字符串的转义规则。

2. 过滤条件的写法错误

你的过滤代码里用了el != '\"\"',这在JS中是无效的:\&不是合法的转义字符,JS会自动忽略这个反斜杠,所以这个字符串实际等价于""""。而你的数组元素是空字符串,自然无法匹配,导致过滤失效。


解决方法

方法一:直接过滤空字符串(最推荐)

既然目标元素是空字符串,直接判断元素是否为空即可:

var arrFiltered = myArray.filter(el => el != null && el !== '');

方法二:如果数组元素确实是""""

如果你的数组元素真的是包含""的字符串(比如正则逻辑有调整),修正过滤字符串的写法,去掉多余的反斜杠:

var arrFiltered = myArray.filter(el => el != null && el !== '""');

额外优化:简化数组构建代码

你原来的do-while循环可以用ES6的matchAll简化,代码更简洁易读:

const testString = '"***100007" "T" "" "" "Regional Office" "n1creditmgmt@mmem.com.au"';
const myRegexp = /[^\s"]+|"([^"]*)"/gi;
// 用matchAll一次性获取所有匹配结果,转换为数组
const myArray = Array.from(testString.matchAll(myRegexp), match => match[1] ?? match[0]);
// 过滤空元素
const arrFiltered = myArray.filter(el => el !== '');

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

火山引擎 最新活动