我有一个很长的字符串。
我想<br/>
在每 80 个字符后追加,以便它可以很好地显示在内部 HTML 中。
有什么简单的方法吗?
用它做long_string.replace(/(.{80})/g, "$1<br>");
在这里检查:http: //jsfiddle.net/x2YJp/
这是学术版(它也比 regex 快):
function fold(input, lineSize, lineArray) {
lineArray = lineArray || [];
if (input.length <= lineSize) {
lineArray.push(input);
return lineArray;
}
lineArray.push(input.substring(0, lineSize));
var tail = input.substring(lineSize);
return fold(tail, lineSize, lineArray);
}
用法:
var arrayOfLines = fold(longString, 80);
var foldedString = arrayOfLines.join('<br/>');
这种方法的另一件很酷的事情是:您可以轻松地在空白处换行。
这是一个这样做的小提琴。
尝试类似:
yourString = yourString.replace(/(.{1,80})/g, '$1<br/>')
您也可以将文本的包含元素的宽度设置为80em
. (它不适合80个字符,因为 anem
是字母的宽度m
,所以你可能想把它设置得低一点)
替换0,1
为0,80
并加入('is') 为'<br />'
console.log("google is very fast".match(new RegExp(".{0,1}", "g")).join('is'));
jahroy答案的 TypeScript 变体:
export class FrameworkUtil {
public static foldText(text: string, charCount: number, buildArray: string[] = []) {
if (text.length <= charCount) {
buildArray.push(text);
return buildArray;
}
let line = text.substring(0, charCount);
const lastSpaceRgx = /\s(?!.*\s)/;
const idx = line.search(lastSpaceRgx);
let nextIdx = charCount;
if (idx > 0) {
line = line.substring(0, idx);
nextIdx = idx;
}
buildArray.push(line);
return FrameworkUtil.foldText(text.substring(nextIdx), charCount, buildArray);
}
}
如果你想要一个快速的解决方案,你可以使用这个算法:
function textFold(input, lineSize) {
const output = []
let outputCharCount = 0
let outputCharsInCurrentLine = 0
for (var i = 0; i < input.length; i++) {
const inputChar = input[i]
output[outputCharCount++] = inputChar
if (inputChar === '\n') {
outputCharsInCurrentLine = 0
} else if (outputCharsInCurrentLine > lineSize-2) {
output[outputCharCount++] = '\n'
outputCharsInCurrentLine = 0
} else {
outputCharsInCurrentLine++
}
}
return output.join('')
}
document.getElementsByTagName('pre')[0].innerHTML = textFold('0123456789abcdefghijklmnopqrstuvwxyz', 10)
<pre></pre>
输入:
0123456789abcdefghijklmnopqrstuvwxyz
输出:
0123456789
abcdefghij
klmnopqrst
uvwxyz