我是 JavaScript 和正则表达式的新手。我正在尝试将文本文档自动格式化为每行特定数量的字符,或者在单词前放置一个“\r”。
这在功能上类似于许多文本编辑器中的 Wordwrap。
例如。我想要每行 10 个字符
原文:我叫戴维·布鲁。
修改:我的名字 \ris Davey \rBlue。
看,如果第 10 个字符是一个单词,它会将整个单词放到一个新行中。
我认为以下应该在某种程度上起作用 /.{1,10}/ (这应该可以找到任何 10 个字符,对吗?)
不知道如何去做剩下的。
请帮忙。
我是 JavaScript 和正则表达式的新手。我正在尝试将文本文档自动格式化为每行特定数量的字符,或者在单词前放置一个“\r”。
这在功能上类似于许多文本编辑器中的 Wordwrap。
例如。我想要每行 10 个字符
原文:我叫戴维·布鲁。
修改:我的名字 \ris Davey \rBlue。
看,如果第 10 个字符是一个单词,它会将整个单词放到一个新行中。
我认为以下应该在某种程度上起作用 /.{1,10}/ (这应该可以找到任何 10 个字符,对吗?)
不知道如何去做剩下的。
请帮忙。
基本上
text = text.replace(/.{1,10} /g, "$&\n")
我确定您的意思是“\n”而不是“\r”
它需要是一个正则表达式吗?我会做这样的事情:
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("");
这将使用正则表达式来解决问题。
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
我认为正则表达式不会为您做到这一点。我会在谷歌上搜索 javascript wordwrap,我敢肯定有人已经写了一个库来为你做这件事