我发现的大多数wordwrap函数都绑定到css和/或浏览器dom。 我在一个javascript环境(rhino)中工作,需要找到或设计一个更好的自动换行,它在给定的行长度值之前打破空白。 我当前的解决方案只是在给定字符之前搜索最后一个空白区域,然后剪切左侧,将其存储为输出行(在数组返回中)。重复,直到不再有文字为止。
希望有人看到优雅的东西。
答案 0 :(得分:4)
你可以这样写:
var wordwrapped = original.trim().replace(/(\S(.{0,78}\S)?)\s+/g, '$1\n');
在至少一个,最多八十个,最好是尽可能多的字符后,用\s+
取代\n
。 (注意:如果一行中有超过80个字符没有空格,那么它们之前和之后会有一个换行符,但不会在它们内部进行换行。)
答案 1 :(得分:1)
此正则表达式将包装每个0-
str The string to wrapped [string]
width The maximum length a string can be [number]
ES2015 / ES6
const wrapped = str.replace(new RegExp(`(?:\\S(?:.{0,${width}}\\S)?(?:\\s+|-|$)|(?:\\S{${width}}))`, 'g'), s => `${s}\n`).slice(0, -1);
// OR complete function
/**
* Wrap every 0-`width` character and respect whitespaces and hyphens also cuts words longer than `width` characters.
* @param str The string to wrapped
* @param width The maximum length a string can be
*/
function wordwrap(str, width) {
return str.replace(new RegExp(`(?:\\S(?:.{0,${width}}\\S)?(?:\\s+|-|$)|(?:\\S{${width}}))`, 'g'), s => `${s}\n`).slice(0, -1);
}
ES5及以下
var wrapped = str.replace(new RegExp('(?:\\S(?:.{0,' + width + '}\\S)?(?:\\s+|-|$)|(?:\\S{' + width + '}))', 'g'), function (s) {return s + '\n'}).slice(0, -1);
// OR complete function
/**
* Wrap every 0-`width` character and respect whitespaces and hyphens also cuts words longer than `width` characters.
* @param str The string to wrapped
* @param width The maximum length a string can be
*/
function wordwrap(str, width) {
return str.replace(new RegExp('(?:\\S(?:.{0,' + width + '}\\S)?(?:\\s+|-|$)|(?:\\S{' + width + '}))', 'g'), function (s) {return s + '\n'}).slice(0, -1);
}
TypeScript
const wrapped = str.replace(new RegExp(`(?:\\S(?:.{0,${width}}\\S)?(?:\\s+|-|$)|(?:\\S{${width}}))`, 'g'), s => `${s}\n`).slice(0, -1);
// OR complete function
/**
* Wrap every 0-`width` character and respect whitespaces and hyphens also cuts words longer than `width` characters.
* @param str The string to wrapped
* @param width The maximum length a string can be
*/
function wordwrap(str: string, width: number): string {
return str.replace(new RegExp(`(?:\\S(?:.{0,${width}}\\S)?(?:\\s+|-|$)|(?:\\S{${width}}))`, 'g'), s => `${s}\n`).slice(0, -1);
}
工作示例
function wordwrap(str, width) {
return str.replace(new RegExp('(?:\\S(?:.{0,' + width + '}\\S)?(?:\\s+|-|$)|(?:\\S{' + width + '}))', 'g'), function (s) {return s + '\n'}).slice(0, -1);
}
var str = 'This is my regular-expression. It will wrap every 0-20 character and respect whitespaces and hyphens, also cuts reallylongwordslikethis.';
var wrapped = wordwrap(str, 20);
console.log(wrapped);
答案 2 :(得分:-1)
RegEx真的是要走的路。 /.{0,79}(?:\s|$)/g
将获取80个字符以下的最长行,该字符以字符或文件末尾结尾。多次调用exec
将提取每一行。
var text = "";
var regex = /.{0,79}(?:\s|$)/g;
var lines = [];
var line;
while (line = regex.exec(text)) {
lines.push(line);
}