JavaScript中检测转义字符及${}标记并拆分字符串为数组的方法
解决方案
要同时实现换行符拆分和${}块拆分,可分两步处理:
步骤说明
- 按换行符拆分初始数组:先把原字符串用
\n拆分,得到初始数组,此时连续的\n会对应空字符串项,满足换行转空项的要求。 - 拆分每个项中的
${}块:遍历初始数组的每个元素,对非空元素用正则匹配提取${...}块和普通文本块,将这些块依次加入结果数组;空元素直接保留。
代码实现(以JavaScript为例)
function formatStringToArray(inputStr) { // 第一步:按换行符拆分得到初始数组 const lineSegments = inputStr.split('\n'); const finalArray = []; // 匹配${...}块或普通文本的正则 const tokenPattern = /(\$\{[^}]+\}|[^\$]+)/g; for (const segment of lineSegments) { if (segment === '') { // 空段直接加入结果 finalArray.push(''); continue; } // 提取当前段中的所有${}块和普通文本 const tokens = segment.match(tokenPattern) || []; // 将所有token依次加入结果数组 tokens.forEach(token => finalArray.push(token)); } return finalArray; } // 测试示例1 const testStr1 = "sampe\nanother sample HERE\n\n\nfinal"; console.log(formatStringToArray(testStr1)); // 输出:["sampe", "another sample HERE", "", "", "final"] // 测试示例2 const testStr2 = "sampe\n${abc}another sample HERE\n\n\nfinal"; console.log(formatStringToArray(testStr2)); // 输出:["sampe", "${abc}", "another sample HERE", "", "", "final"]
关键细节
- 正则
/(\$\{[^}]+\}|[^\$]+)/g会匹配两种内容:\$\{[^}]+\}:匹配完整的${...}块,确保${}内部的内容被完整捕获;[^\$]+:匹配不含$的普通文本,避免误拆分单独的$字符(若需处理单独$可调整正则)。
- 空段(对应连续换行)直接保留为空字符串,符合需求。
内容的提问来源于stack exchange,提问作者Thidasa Pankaja
相关产品推荐
相关产品推荐

