使用string.match方法填充数组变量时遇到问题求助
问题分析与修复
核心错误:条件判断中的赋值操作
你的代码第一个if条件里误用了赋值操作符=,而非严格相等比较符===:
if (orgSearchDomain.match(/"item":{"id"/g).length = 1)
这行代码会把1赋值给length属性,且赋值表达式的返回值为1(属于真值),导致第一个if分支永远成立,程序完全不会进入else if分支,自然不会执行orgAddresses的赋值逻辑,所以它始终是空数组。
次要问题与优化
- 重复调用
match浪费性能:多次调用match解析同一个字符串,建议提前缓存匹配结果。 - 不必要的
new Array包装:match返回的已经是数组,用new Array(...)包裹会生成二维数组,直接赋值或用slice(0)复制即可。
修复后的代码
var orgSearchDomain = /*JSON STRING*/; let orgSearchName = ''; let orgId = 0; var orgAddresses = []; // 提前缓存item id的匹配结果,避免重复调用match const itemIdMatches = orgSearchDomain.match(/"item":{"id"/g); if (itemIdMatches?.length === 1) { // 用可选链避免null报错 orgId = orgSearchDomain.match(/(?<="id":)\d+/)[0]; } else if (itemIdMatches?.length > 1) { // 直接赋值匹配结果,或用slice复制,加|| []处理匹配失败的情况 orgAddresses = orgSearchDomain.match(/(?<="address":).+?(?="visible_to)/g) || []; }
额外提示
- 注意正则表达式里的多余空格:你原正则中的
(? =,"visible_to)有不必要的空格,应写成(?="visible_to),否则可能导致匹配结果不符合预期。 - 用
?.可选链操作符可以避免match返回null时访问length属性报错的情况。
内容的提问来源于stack exchange,提问作者Zach Walsh
相关产品推荐
相关产品推荐

