用于在 JavaScript 中的空白处换行单行长文本的正则表达式

Regular Expression for wrapping single lines of long text at whitespace in JavaScript

情况是这样的: 我有一个段落文本,假设有 500 个字符。现在,我尝试将 span-Tags 中的每 100 个字符换行为 5 个跨度,每个跨度为 100 个字符。我目前正在使用 JavaScript:

中的以下正则表达式执行此操作
var target = "< 500 characters of example text here >"
var regex = new RegExp(".{1,100}", "g");
var replacement = target.replace(regex, function replace(match) { 
     return '<span>' + match + '</span>'; 
});

工作正常,但问题是该函数不关心是否有空格,甚至在单词内部也断行。因此,我尝试通过添加正向后视检查是否有空格来重写正则表达式:

var regex = new RegExp(".{1,100}(?<=\s)", "g");

它正在与在线正则表达式测试器/调试器一起工作,但我的浏览器提示存在语法错误 "invalid regexp group"。我搜索了一会儿,发现 JavaScript 可能不支持积极的回顾。我又重写了代码,结果是这样的:

var regex = new RegExp(".{1,100}(?=\s)", "g");

同样,它只适用于在线正则表达式测试器,不适用于我的项目。 我不是专业人士,不能说我完全理解正则表达式。也许这不是解决我问题的最佳方法。但我希望有人能帮我解决他的 JavaScript 或 jQuery 问题。

最好的, 克里斯蒂安

我想对您的正则表达式的最新版本提出一些改进建议。

  1. \s*开始正则,一会就明白了

  2. .{1,100}作为一个capturng组(用括号括起来)。 这样,由于第 1 点的更正,您只能复制这组, "continuation" 行中没有初始 "white" 个字符。

  3. 为了正确地提供最后一个块,可能 没有 任何尾随 space, 将前瞻写为替代方案:一系列 "white" 个字符 或文本结尾。

所以整个正则表达式可以是:

\s*(.{1,100})(?=\s+|$)

当然,正如 Pointy 评论的那样,反斜杠加倍。