ES6中提取文本块前两行,是否有优于string.split()的方案?
这里有几个更简洁高效的ES6优化方案,既能解决原代码里的小问题,还能让逻辑更鲁棒:
方案1:正则匹配(高效精准)
直接用正则匹配出前两个完整句子,避免分割后处理空元素的麻烦:
const string = "This is some text. Another text. Also third. Repeated text. Repeated text.Repeated text.Repeated text.Repeated text.Repeated text.Repeated text.Repeated text.Repeated text. "; const pickTwoLinesFromParagraph = (str) => { // 匹配以句号结尾的完整句子,允许句号后带任意空白字符 const firstTwoSentences = str.match(/[^.]+\.\s*/g)?.slice(0, 2); // 处理匹配不到的边界情况,避免报错 return firstTwoSentences ? firstTwoSentences.join('').trimEnd() + '...' : ''; }; console.log(pickTwoLinesFromParagraph(string)); // 输出: "This is some text. Another text..."
优化点:
- 用正则直接锁定句子结构,比先分割再筛选更高效
- 可选链
?.处理了字符串为空或无匹配的边界场景 trimEnd()自动清理原字符串末尾多余的空格
方案2:数组方法链式调用(可读性高)
如果觉得正则不够直观,可以用ES6数组方法链式处理,兼顾可读性和鲁棒性:
const pickTwoLinesFromParagraph = (str) => { const sentences = str.split('.') .map(sentence => sentence.trim()) // 清理每个句子前后的空格 .filter(Boolean) // 过滤掉分割后产生的空字符串 .slice(0, 2); // 取前两个句子 return sentences.length ? sentences.join('. ') + '...' : ''; };
优化点:
- 解决了原代码中分割后可能取到空元素的问题
- 自动处理句号后有无空格的情况
- 链式调用逻辑清晰,易维护
原代码的小问题提醒:原代码里的newStrníng是拼写错误(多了重音符号),这会导致变量未定义的报错,优化方案里已经修复了这类问题。
内容的提问来源于stack exchange,提问作者PineCone
相关产品推荐
相关产品推荐

