如何在每80个字符后插入换行符

时间:2013-07-27 06:42:47

标签: javascript

我有一个很长的字符串。

我想在每80个字符后附加<br/>,以便它可以很好地显示在内部HTML中。

有简单的方法吗?

6 个答案:

答案 0 :(得分:8)

使用long_string.replace(/(.{80})/g, "$1<br>");

执行此操作

在此处查看:http://jsfiddle.net/x2YJp/

答案 1 :(得分:7)

这是学术版(也是faster than 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/>');

对于这种方法,另一件很酷的事情是:你可以轻松地在空白处进行包装。

这是fiddle,可以做到这一点。

答案 2 :(得分:3)

尝试类似:

yourString = yourString.replace(/(.{1,80})/g, '$1<br/>')

您也可以将文本的包含元素的宽度设置为80em。 (由于em是字母m的宽度,因此正好 80个字符,因此您可能希望将其设置得更低一些)

答案 3 :(得分:1)

0,1替换为0,80并加入('是')'<br />'

console.log("google is very fast".match(new RegExp(".{0,1}", "g")).join('is'));

答案 4 :(得分:0)

如果你想要一个快速的解决方案,你可以使用这个算法:

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

答案 5 :(得分:0)

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);
    }
}