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

JS正则:选择连续多引号场景下不在引号内的所有空格

引号外空格删除与分词实现方案

一、删除引号外空格的正则替换

要删除所有不在双引号内的空格,可使用以下JavaScript正则替换逻辑:

const originalStr = '" Test Test " ab c " Test" "Test " "Test" "T e s t"';
const processedStr = originalStr.replace(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g, '');
// 处理后结果:" Test Test "abc" Test""Test ""Test""T e s t"

正则说明

  • \s+:匹配一个或多个连续空格
  • (?=(?:[^"]*"[^"]*")*[^"]*$):正向预查确保当前空格处于引号外
    • (?:[^"]*"[^"]*")*:匹配零或多组成对的双引号内容(非引号字符+引号+非引号字符+引号)
    • [^"]*$:确保后续内容中没有未闭合的双引号,保证当前位置在偶数个引号之后(即不在引号内)

二、直接实现分词需求

如果最终目标是得到分词数组,无需先删除空格,可直接用正则匹配提取目标内容:

const str = '" Test Test " ab c " Test" "Test " "Test" "T e s t"';
const tokenizedResult = str.match(/"[^"]*"|\S+/g);
// 分词结果:[" Test Test ", "ab", "c", " Test", "Test ", "Test", "T e s t"]

分词正则说明

  • "[^"]*":匹配所有双引号包裹的内容(保留引号内的空格)
  • \S+:匹配引号外的连续非空格字符(即单个分词单元)

关于你尝试的正则问题

你之前使用的(,|;\s|\s)+(?![^\[]*\])(?![^\(]*\))(?![^\{]*\})(?![^"].*")存在两个核心问题:

  1. 使用了HTML实体"而非实际字符串中的双引号",无法正确匹配字符串里的引号
  2. 引号判断逻辑错误,(?![^"].*")无法准确识别成对的引号,导致无法区分引号内外的空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:41:19