如何用正则表达式选中引号首尾空格并移除(不使用trim())
解决方案
直接使用以下正则表达式进行全局替换,将匹配到的内容替换为空字符串即可:
(?<=")\s+|\s+(?=")
正则说明
(?<=")\s+:匹配紧跟在双引号之后的一个或多个空格,对应引号内部开头的冗余空格\s+(?="):匹配紧跟在双引号之前的一个或多个空格,对应引号内部结尾的冗余空格- 用
|分隔两种匹配场景,开启全局替换(g标志)就能精准移除所有引号内部的首尾空格,同时保留引号内单词之间的正常空格
验证示例
- 原字符串:
red " blue " green!→ 替换后:red "blue" green! - 原字符串:
" red blue green "→ 替换后:"red blue green" - 原字符串:
" red " " blue " " green "→ 替换后:"red" "blue" "green"
原正则问题分析
你之前使用的正则\s+(?=(?:(?:[^"]*"){2})*[^"]*"[^"]*$)是通过统计后续引号数量判断空格是否在引号内,但它会匹配引号内所有后续引号数为奇数的空格——包括单词之间的中间空格,这就是引号内有多个单词时失效的原因。新正则通过断言精准锁定引号的前后位置,只处理首尾冗余空格,不会影响内部正常空格。
内容的提问来源于stack exchange,提问作者Blub Blubby
相关产品推荐
相关产品推荐

