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

JavaScript如何用正则按点分割字符串且不拆分双引号内内容

正则调整方案

问题原因

你当前使用的正则仅匹配了双引号包裹内容、无点无空格的普通标识符两类结构,没有将字段后跟随的数组索引部分(如[0])纳入匹配范围,因此最后一个分段会被截断为"array.nested.1",丢失后续索引内容。

方案1:使用split方法实现(符合要求)

直接匹配不在双引号内部的.作为分割符即可,实现逻辑更简单:

const str = '"root.doted"."nested.dots"."array.nested.1"[0]';
// 按不在引号内的点分割
const result = str.split(/\.(?=(?:[^"]*"[^"]*")*[^"]*$)/);
console.log(result); // 输出:['"root.doted"', '"nested.dots"', '"array.nested.1"[0]']

正则解释:

  • \. 匹配字面量点
  • (?=(?:[^"]*"[^"]*")*[^"]*$) 正向前瞻断言,校验当前点后方的双引号总数量为偶数,说明当前点不在双引号包裹范围内,是合法的分段分隔符

方案2:匹配提取模式(和你原有写法思路一致)

如果你更倾向于用match方法直接提取分段,调整原有正则加入索引匹配规则即可:

const str = '"root.doted"."nested.dots"."array.nested.1"[0]';
const reg = /("[^"]*"|[^".\s]+)(?:\[\d+])*(?=\s*\.|\s*$)/g;
const result = str.match(reg);
console.log(result); // 输出结果和要求一致

正则调整说明:

  • 新增(?:\[\d+])*非捕获组,匹配0个或多个后置的数组索引结构,确保索引会和前面的字段名拼接为完整分段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 10:15:10