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

如何使用JS正则按双花括号数组正确分割字符串?

问题原因与修正方案

失败原因

  1. 单词边界\b不适用:\b匹配的是「单词字符(字母、数字、下划线)和非单词字符的分界」,但{{test}}开头的{是非单词字符,它前面的空格也是非单词字符,两者之间不存在单词边界;同理结尾的}和后面的空格之间也没有单词边界,导致你的regex2根本匹配不到任何内容,split自然不会分割原字符串。
  2. 特殊字符未转义:{{test}}里的{和}是正则的特殊语法字符(用来表示量词,比如{2,3}),直接拼进new RegExp时,正则引擎会把{{当成语法错误处理,进一步导致匹配失败。

修正方法

方法一:直接用原匹配正则分割(最简单)

既然你已经有了匹配{{...}}的正则,直接用它来split就行——只要给正则加上捕获组,split就会把匹配到的分隔符(也就是{{test}}这类内容)也加入结果数组:

let str = 'This is a {{test}} string with {{multiple}} matches.';
let regex = /({{.+?}})/g; // 给整个匹配内容加捕获组
let substrings = str.split(regex);
console.log(substrings); 
// 输出:["This is a ", "{{test}}", " string with ", "{{multiple}}", " matches."]

方法二:修正基于matches数组的正则构建

如果一定要用matches数组来生成分割正则,需要做两个调整:

  1. 去掉无用的\b;
  2. 对每个匹配项做正则转义,把特殊字符转成字面量:
let str = 'This is a {{test}} string with {{multiple}} matches.';
let regex = /\{\{(.+?)\}\}/g;
let matches = str.match(regex);

// 正则转义函数:把特殊字符转成字面量
function escapeRegex(str) {
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

// 构建正确的分割正则
let regex2 = new RegExp(matches.map(escapeRegex).join('|'), 'gi');
let substrings = str.split(regex2);
console.log(substrings);
// 输出:["This is a ", "{{test}}", " string with ", "{{multiple}}", " matches."]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:45:30