如何按30字符限制结合句号/逗号/空格拆分字符串?
问题:按30字符限制优先按指定分隔符拆分字符串
需要将字符串按30字符限制拆分,拆分优先在句号(.)、逗号(,)或空格( )处执行——达到30字符或遇到分隔符时拆分。尝试用正则表达式的match方法实现,但无法按指定分隔符拆分。
示例代码:
let x='Lorem ipsum dolor sit amet. Excepteur cuptat non proident, consectetur adipiscing elite detailo'; let splitString = x.match(/.{1,30}/g); console.log(splitString);
当前输出:
[ "Lorem ipsum dolor sit amet. Ex", "cepteur cuptat non proident, c", "onsectetur adipiscing elite de", "tailo" ]
期望输出:
[ "Lorem ipsum dolor sit amet.", "Excepteur cuptat non proident,", "consectetur adipiscing elite", "detailo" ]
解决方案
你之前的正则/.{1,30}/g只是简单按1-30字符截断,完全不考虑指定分隔符,所以会拆分到单词中间。要实现优先在分隔符处拆分,可以使用反向预查结合分支匹配的正则,同时处理末尾空格的问题:
let x='Lorem ipsum dolor sit amet. Excepteur cuptat non proident, consectetur adipiscing elite detailo'; // 正则逻辑: // 1. 优先匹配1-30个字符,且结尾是.、,或空格(确保分隔符被包含在内) // 2. 如果30字符内没遇到分隔符,直接匹配1-30个字符 // 最后用trimEnd()去除可能的末尾空格 let splitString = x.match(/(?:.{1,30}(?<=[., ])|.{1,30})/g).map(str => str.trimEnd()); console.log(splitString);
运行结果:
[ "Lorem ipsum dolor sit amet.", "Excepteur cuptat non proident,", "consectetur adipiscing elite", "detailo" ]
正则细节说明
(?:...):非捕获组,用于分组但不保留匹配结果.{1,30}(?<=[., ]):匹配1-30个字符,且最后一个字符是.、,或空格(反向预查确保结尾是指定分隔符)|.{1,30}:分支匹配,当30字符内没有遇到指定分隔符时,直接匹配1-30个字符.map(str => str.trimEnd()):去除匹配项末尾的多余空格,符合期望输出格式
内容的提问来源于stack exchange,提问作者user3872094
相关产品推荐
相关产品推荐

