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

求TypeScript正则:匹配引号外连续2+空格及推荐npm解析库

解决方案

一、TypeScript正则表达式实现

要匹配并移除引号外的连续多空格,核心思路是优先匹配引号内的内容(原样保留),再匹配引号外的连续2个及以上空格(替换为单个空格)。

基础版本(适用于无转义引号的场景)

const input = `"John    Smith" and Sarah Brown    are    having 'a     ' nice(" .    ")   day tod'   'ay.`;
const regex = /(".*?"|'.*?'|(\s{2,}))/gs;
const output = input.replace(regex, (match, quotedContent) => {
  // 匹配到引号内内容则直接保留,否则将多空格替换为单个空格
  return quotedContent ? match : ' ';
});
console.log(output);
// 输出:"John    Smith" and Sarah Brown are having 'a     ' nice(" .    ") day tod'   'ay.

健壮版本(支持引号内的转义字符)

如果需要处理引号内包含转义引号的场景(比如"He said \"Hi!\""),可以使用更严谨的正则:

const robustRegex = /("[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'|(\s{2,}))/gs;
const robustOutput = input.replace(robustRegex, (match, quotedContent) => {
  return quotedContent ? match : ' ';
});

二、推荐的词法分析/解析npm库

如果你的场景涉及更复杂的文本结构(比如嵌套引号、多种字符串格式、自定义语法),正则的局限性会显现,此时词法分析库是更可靠的选择,你找到的lexing类库完全适用。以下是几个适合的库:

  • lex:轻量级词法分析器,支持自定义token规则,可轻松定义"引号内文本"和"空格"等token类型,遍历token时仅处理外部空格即可,TypeScript可通过@types/lex获取类型支持。
  • pegjs:PEG解析器生成器,允许编写自定义语法规则解析带引号的文本,适合需要处理复杂语法逻辑的场景。
  • string-parser:专门针对带引号、转义字符的字符串解析,体积小、API简单,适合轻量级场景。
  • acorn:JavaScript/TypeScript解析器,虽主打代码解析,但也能用于处理复杂字符串结构,适合需要兼容多种字符串格式的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:40:33