如何获取模板字面量中指定行的字符数?实现按行与字符索引截取
解决多行模板字面量的行截取与字符数获取问题
核心思路
先将多行模板字面量拆分为独立的行数组,这样就能直接获取指定行的内容和字符数,再根据行内索引完成截取操作。
具体实现步骤与代码示例
- 拆分多行字符串为行数组:使用正则
/\r?\n/拆分,兼容Windows(\r\n)和Unix(\n)的换行格式。 - 获取指定行的字符数:直接访问行数组对应元素的
length属性。 - 按行号和行内索引截取:可直接对行数组元素进行截取,或计算全局索引从原字符串中截取。
// 示例多行模板字面量 const multiLineStr = `第一行内容 第二行的字符数是多少? 第三行末尾有个空格 `; // 1. 拆分成兼容不同换行符的行数组 const lines = multiLineStr.split(/\r?\n/); // 2. 获取指定行的字符数(示例:第二行,数组索引为1) const targetLineIndex = 1; const lineCharCount = lines[targetLineIndex].length; console.log(`第${targetLineIndex + 1}行的字符数:${lineCharCount}`); // 输出:第2行的字符数:13 // 3. 截取指定行内的部分内容(示例:第二行第3到第8个字符,索引从0开始) const startInLine = 2; const endInLine = 8; const slicedLineContent = lines[targetLineIndex].slice(startInLine, endInLine); console.log(slicedLineContent); // 输出:行的字符数 // 若需从原字符串中截取(而非行数组元素),计算全局索引 let globalStartPos = 0; const lineBreakLength = multiLineStr.includes('\r\n') ? 2 : 1; // 累加目标行之前所有行的长度+换行符长度 for (let i = 0; i < targetLineIndex; i++) { globalStartPos += lines[i].length + lineBreakLength; } globalStartPos += startInLine; const globalEndPos = globalStartPos + (endInLine - startInLine); const slicedOriginalContent = multiLineStr.slice(globalStartPos, globalEndPos); console.log(slicedOriginalContent); // 输出:行的字符数
注意事项
- 行号计数:数组索引从0开始,若你习惯从1开始计数,记得做
索引 = 行号 - 1的转换。 - 换行符影响:拆分后的行数组不包含换行符,所以计算全局索引时要额外加上换行符的长度。
- 行尾空白:
length属性会包含行末尾的空格、制表符等空白字符,符合实际字符计数逻辑。
内容的提问来源于stack exchange,提问作者mikwee
相关产品推荐
相关产品推荐

