我想根据30个字符的限制拆分字符串,这里的问题是它应该在句点(.
(、逗号(,
(或空格((上断开。即30的字符串长度或先到的定界符。我尝试使用regex进行匹配,这可以很好地拆分,但没有使用分隔符。
例如,这是我的示例代码。
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"
]
let x='Lorem ipsum dolor sit amet. Excepteur cuptat non proident, consectetur adipiscing elite detailo';
let splitString = x.match(/.{1,30}[.s,]/g).map(item => item.trim());
const remaining = x.replace(splitString.join(' '), '');
splitString = [...splitString, remaining.trim()]
console.log(splitString);
编辑:
我去掉了子字符串中的尾随空格。不知道是否有必要,但现在已经有了想要的确切结果。
您可以与此正则表达式匹配:
[^s].{1,29}((?=s|$)|(?<=[.,]))
它查找一个非空格字符([^s]
(,然后最多查找29个其他字符(.{1,29}
(,这些字符要么是:
- 后面跟一个空格或行
(?=s|$)
的末尾;或 - 以逗号或句号
(?<=[.,])
结尾
let x='Lorem ipsum dolor sit amet. Excepteur cuptat non proident, consectetur adipiscing elite detailo';
let splitString = x.match(/[^s].{1,29}((?=s|$)|(?<=[.,]))/g);
console.log(splitString);