在Pug中如何用JavaScript拆分字符串为两段并保留完整单词
字符串拆分解决方案(保留完整单词)
简便正则解法
既然你已经用正则str.replace(/^([\s\S]{70}[^\s]*)[\s\S]*/, "$1")拿到了前半部分str1,后半部分可以直接基于str1的长度截取,再去掉开头多余空格:
const str = "hello i am a very long string that needs to be split into two different parts! thank you so much for helping."; const str1 = str.replace(/^([\s\S]{70}[^\s]*)[\s\S]*/, "$1"); const str2 = str.slice(str1.length).trim();
也可以用一次正则直接捕获两个分组,一步到位:
const matchResult = str.match(/^([\s\S]{70}[^\s]*)\s*(.*)$/); const str1 = matchResult[1]; const str2 = matchResult[2];
这个正则逻辑是:先捕获前70个字符后截止到下一个空格的完整单词(标题部分),跳过中间空格后,捕获剩余所有内容作为后半部分。
封装函数(适合Pug视图导入)
如果觉得正则可读性差,写个直观的函数更稳妥:
function splitStringByWord(str, charLimit = 70) { // 找到字符限制位置最近的空格索引 let splitIndex = str.lastIndexOf(' ', charLimit); // 处理特殊情况:字符串短于限制长度,或最后一个单词超长 splitIndex = splitIndex === -1 ? str.length : splitIndex; return { title: str.slice(0, splitIndex).trim(), content: str.slice(splitIndex).trim() }; } // 使用示例 const str = "hello i am a very long string that needs to be split into two different parts! thank you so much for helping."; const { title: str1, content: str2 } = splitStringByWord(str);
将这个函数导出后,就能在Pug视图里直接调用。
内容的提问来源于stack exchange,提问作者twopcz
相关产品推荐
相关产品推荐

