15

我有一个很长的字符串。

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

有什么简单的方法吗?

4

6 回答 6

16

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

在这里检查:http: //jsfiddle.net/x2YJp/

于 2013-07-27T06:49:48.440 回答
11

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

这种方法的另一件很酷的事情是:您可以轻松地在空白处换行。

这是一个这样做的小提琴

于 2013-07-27T07:08:53.423 回答
4

尝试类似:

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

您也可以将文本的包含元素的宽度设置为80em. (它不适合80个字符,因为 anem是字母的宽度m,所以你可能想把它设置得低一点)

于 2013-07-27T07:39:09.197 回答
1

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

console.log("google is very fast".match(new RegExp(".{0,1}", "g")).join('is'));
于 2013-07-27T06:52:42.263 回答
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);
    }
}
于 2021-05-04T12:58:25.460 回答
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
于 2021-04-22T13:33:59.410 回答