3

我是 JavaScript 和正则表达式的新手。我正在尝试将文本文档自动格式化为每行特定数量的字符,或者在单词前放置一个“\r”。

这在功能上类似于许多文本编辑器中的 Wordwrap。

例如。我想要每行 10 个字符

原文:我叫戴维·布鲁。

修改:我的名字 \ris Davey \rBlue。

看,如果第 10 个字符是一个单词,它会将整个单词放到一个新行中。

我认为以下应该在某种程度上起作用 /.{1,10}/ (这应该可以找到任何 10 个字符,对吗?)

不知道如何去做剩下的。

请帮忙。

4

4 回答 4

13

基本上

 text = text.replace(/.{1,10} /g, "$&\n")

我确定您的意思是“\n”而不是“\r”

于 2010-02-09T21:27:57.073 回答
3

它需要是一个正则表达式吗?我会做这样的事情:

var str = "My name is Davey Blue.",
    words = str.split(/(\s+)/);
for (var i=0,n=0; i<words.length; ++i) {
    n += words[i].length;
    if (n >= 10) {
        words[i] = "\n" + words[i];
        n = 0;
    }
}
str = words.join("");
于 2010-02-09T21:23:49.273 回答
1

这将使用正则表达式来解决问题。

myString.replace(/((\w|\s){0,9}\s|\w+\s|$)/g, "$1\r")

(如果 N 是所需的行长,则将“9”替换为 N-1)

在字符串中的每个位置,它尝试按以下顺序执行以下操作:
1. 尝试贪婪地匹配最多 9 个字符(=尽可能多),后跟一个空格(因此总共最多 10 个以空格结尾的字符),然后在其后插入 \r (通过字符串替换)
2. 如果失败(因为找不到少于 10 个字符的单词),它匹配一个单词(不管它有多长)加上一个空格, 然后在此之后插入 \r
3. 它匹配字符串的末尾并插入 \r

于 2010-02-09T21:44:45.693 回答
0

我认为正则表达式不会为您做到这一点。我会在谷歌上搜索 javascript wordwrap,我敢肯定有人已经写了一个库来为你做这件事

于 2010-02-09T21:23:12.487 回答