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

求助:用正则表达式添加字符间空格,解决Vue插值安全问题

搞定Vue插值空格问题的正则方案

嗨,我来帮你解决这个正则表达式的调整需求!针对Vue插值的空格控制——既要保证双花括号和内容之间始终有空格,又不能加多余空格,我整理了几个精准的实现方案:

1. 基础场景:处理普通双花括号{{}}

如果你的内容里都是普通的{{}}格式,用这个正则就能完美解决:

$pattern = '/{{\s*(.*?)\s*}}/s';
$replacement = '{{ $1 }}';
$processedStr = preg_replace($pattern, $replacement, $originalStr);

正则拆解:

  • {{:精准匹配起始的双左括号
  • \s*:匹配括号后0个或多个任意空白(包括空格、制表符、换行)
  • (.*?):非贪婪匹配括号内的所有内容(s修饰符让.能匹配换行,适合多行插值内容)
  • \s*:匹配内容结尾到}}之间的0个或多个空白
  • 替换成{{ $1 }}:$1是去掉前后空格的插值内容,这样就保证了括号和内容之间只有一个空格,同时自动清理内容前后的多余空格。

2. 扩展场景:处理HTML实体形式的括号

如果服务器返回的是转义后的HTML实体(比如{对应{),可以用这个正则处理:

$pattern = '/({){2}\s*(.*?)\s*(}){2}/s';
$replacement = '$1$1 $2 $3$3';
$processedStr = preg_replace($pattern, $replacement, $originalStr);

这个正则会匹配{{内容}}这类格式,同样自动清理内容前后的多余空格,只在实体括号和内容之间保留一个空格。

3. 兼容场景:同时处理普通括号和实体括号

要是你需要同时兼容两种格式,可以分两步替换:

// 先处理普通双花括号
$pattern1 = '/{{\s*(.*?)\s*}}/s';
$str = preg_replace($pattern1, '{{ $1 }}', $originalStr);
// 再处理HTML实体形式的括号
$pattern2 = '/({){2}\s*(.*?)\s*(}){2}/s';
$processedStr = preg_replace($pattern2, '$1$1 $2 $3$3', $str);

效果验证

举几个实际例子,看看处理前后的变化:

  • 输入{{name}} → 输出{{ name }}
  • 输入{{ name.firstName }} → 输出{{ name.firstName }}
  • 输入{{user}} → 输出{{ user }}
  • 输入{{ user.address }} → 输出{{ user.address }}

这样既满足了Vue插值的格式要求,又避免了多余空格的问题,完美解决你提到的插值安全问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:54