JavaScript正则:移除双引号外空白及忽略转义引号问题
移除JSON字符串引号外空白并正确识别转义引号的解决方案
要解决这个问题,核心是精准区分引号内(含转义引号)和引号外的内容,只清除引号外的所有空白字符。之前尝试的正则没考虑转义引号的情况,导致引号对匹配错误,下面是可行的实现方案:
核心代码实现
// 示例输入 const rawJson = '{ "key": "he said \\"how would I do this\\" sadly? " }'; // 处理逻辑 const cleanedJson = rawJson.replace(/("(?:\\.|[^"\\])*")|\s+/g, (match, quotedContent) => { // 如果匹配到引号内的内容,直接保留;否则替换空白为空 return quotedContent || ''; }); console.log(cleanedJson); // 输出:{"key":"he said \"how would I do this\" sadly? "}
正则表达式解析
/("(?:\\.|[^"\\])*")|\s+/g 分为两部分:
("(?:\\.|[^"\\])*"):匹配完整的双引号包裹内容,包括内部的转义引号:(?:\\.|[^"\\])*是非捕获组,用来匹配两种情况:\\.:匹配任意转义字符(比如\"、\\等)[^"\\]:匹配既不是双引号也不是反斜杠的普通字符
这部分能确保不会把转义的\"误判为引号对的结束。
|\s+:匹配引号外的一个或多个空白字符(空格、制表符、换行等)
回调函数中,当匹配到引号内的内容时直接返回,否则将空白替换为空字符串,完美实现需求。
测试普通场景
输入:{ "key": "My value " }
处理后输出:{"key":"My value "}
内容的提问来源于stack exchange,提问作者TiesDO
相关产品推荐
相关产品推荐

