如何替换双引号(")前后的空白字符?
替换双引号实体前后空白字符的实现方案
问题场景
现有文本及处理代码如下:
const text = 'hey : "bob " Hey Hello' text.replace(' "', '"').replace('" ', '"') // 期望结果: 'hey :"bob"Hey Hello'
需要实现替换所有双引号实体(")前后的空白字符,同时保留文本中其他位置的空白(比如Hey后的多个空格)。
解决方案
1. 全局正则替换(推荐)
原代码的问题在于replace方法仅替换第一个匹配项,无法处理多处出现的空白。使用正则表达式并添加全局标志g,可以一次性替换所有符合条件的空白:
方案A:合并正则(更简洁)
const text = 'hey : "bob " Hey Hello' const result = text.replace(/\s(")|(")\s/g, '$1$2') console.log(result) // 输出: 'hey :"bob"Hey Hello'
正则说明:
\s("):匹配空白字符后跟",通过捕获组保留"(")\s:匹配"后跟空白字符,通过捕获组保留"g:全局标志,确保所有匹配项都被替换$1$2:替换为两个捕获组的内容,即保留"并去掉前后空白
方案B:拆分正则(更直观)
如果觉得合并正则难以理解,可以拆分两次全局替换:
const text = 'hey : "bob " Hey Hello' const result = text.replace(/\s"/g, '"') // 去掉"前的空白 .replace(/"\s/g, '"') // 去掉"后的空白 console.log(result) // 输出: 'hey :"bob"Hey Hello'
2. 原代码优化
如果仅需处理单次匹配,原代码可正常运行;但要处理多处匹配,只需给replace的第一个参数改为正则并添加g标志:
// 优化后的原写法 const result = text.replace(/ "/g, '"').replace(/" /g, '"')
内容的提问来源于stack exchange,提问作者Ahmed Elsayed
相关产品推荐
相关产品推荐

