如何用正则分割含可变变量的{{ 变量名 }}格式字符串?
解决方案
核心思路
要实现需求,需要匹配目标变量片段并保留分割结果中的匹配项,同时将匹配到的带空格的片段统一替换为标准格式{{变量值}}。关键在于使用正则捕获组让split()方法保留匹配内容,再对匹配项做格式化处理。
具体实现代码
// 转义正则特殊字符,避免动态变量包含特殊字符时出错 function escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } // 动态变量 const targetVar = 'text1'; const escapedVar = escapeRegExp(targetVar); // 构造正则:捕获{{和}}之间任意空格+目标变量+任意空格的片段 const splitRegex = new RegExp(`({{\\s*${escapedVar}\\s*}})`, 'g'); // 输入字符串 const inputStr = '{{ text1 }} 123 {{text1}}{{text1}} {{ text1}}134'; // 执行分割+过滤空项+格式化匹配片段 const result = inputStr .split(splitRegex) .filter(item => item !== '') // 移除分割产生的空字符串 .map(item => { // 判断是否为目标变量片段,是则替换为标准格式 return splitRegex.test(item) ? `{{${targetVar}}}` : item; }); console.log(result); // 输出:["{{text1}}"," 123 ","{{text1}}","{{text1}}"," ","{{text1}}","134"]
正则说明
({{\\s*${escapedVar}\\s*}}):用捕获组包裹匹配内容,确保split()会将匹配到的片段保留在结果数组中。\\s*:匹配任意数量的空格(包括0个),覆盖目标片段中变量前后的所有空格情况。escapeRegExp函数:处理动态变量中的正则特殊字符(如.,*,?等),避免正则语法错误。
内容的提问来源于stack exchange,提问作者Denis123
相关产品推荐
相关产品推荐

