我正在尝试创建一个工具,该工具接受输入文本并将其拆分为特定字符数的文本块。但是,我需要确保它不会在单词中间拆分文本。
在我的例子中,我在 155 个字符后拆分字符串。
我已经做了很多搜索来尝试找到解决方案,但我担心它可能比我对 Javascript 的知识允许我弄清楚的更复杂。我相信我只需要制定某种逻辑,让拆分器回溯到一个空间,如果它在一个单词的中间就可以拆分,但我不确定如何写出这样的东西。
这是我目前的 javascript 代码:
function splitText() {
"use strict";
var str = document.getElementById("user_input").value;
var size = 195;
var chunks = new Array(Math.ceil(str.length / size)),
nChunks = chunks.length;
var newo = 0;
for (var i = 0, o = 0; i < nChunks; ++i, o = newo) {
newo += size;
chunks[i] = str.substr(o, size);
}
var newq = 0;
for (var x = 0, q = 0; x < nChunks; ++x, q = newq) {
$("#display").append("<textarea readonly>" + chunks[x] + "</textarea><br/>");
}
}
这是我的 HTML:
<body>
<content>
<h1>Text Splitter</h1>
<form>
<label>Enter a Message</label>
<input type="text" name="message" id="user_input">
</form>
<form>
<input type="button" onclick="splitText();" id="submit" value="Submit!"> <br/>
</form>
<label>Your split message: </label>
<p><span id='display'></span></p>
</content>
</body>
如果您想看一下,这是当前工作形式的代码: https ://jsfiddle.net/add4s7rs/7/
谢谢!感谢您的帮助!
原文由 Leminnes 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用正则表达式将字符串拆分成一定长度的块的一种简短方法:
一些例子:
这是有效的,因为量词(在这种情况下
{1,154}
)默认情况下是贪婪的,并且会尝试匹配尽可能多的字符。将(\s|$)
放在.{1,154}
后面强制匹配终止于空白字符或字符串的末尾。所以.{1,154}(\s|$)
将匹配最多 154 个字符后跟一个空白字符。/g
修饰符使它继续匹配整个字符串。把它放在你的函数的上下文中:
请注意(正如评论中所指出的那样)如果字符串中的某个单词长于块的长度,则此代码将失败。
另请注意,此代码将在拆分字符串的末尾留下一个尾随空格;如果你想避免将最后一组更改为前瞻并坚持第一个字符不是空格: