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

时间:2018-10-28 13:59:57

标签: javascript regex lookbehind

情况如下: 我有一个段落文字,假设有500个字符。现在,我尝试将span标签中的每100个字符包装为5个span,每个都有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>'; 
});

这很好用,但是问题是该函数是否在乎是否存在空格,并且即使在单词内部也使行中断。因此,我尝试通过在检查后面是否存在空格的情况下添加正向looklook来重写正则表达式:

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

它与在线正则表达式测试器/调试器一起使用,但是我的浏览器抛出一个语法错误“无效的正则表达式组”。我搜索了一会儿才发现,JavaScript可能不支持正向隐藏。我再次重写了代码,这就是结果:

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

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

最好, 基督徒

1 个答案:

答案 0 :(得分:0)

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

  1. \s*启动正则表达式,其原因很快就会清楚。

  2. .{1,100}放入 capturng组(用括号括起来)。 这样,由于第1点的修正,您只能复制此组, 在“连续”行中没有初始的“白色”字符。

  3. 为正确地服务最后一块,也许没有任何尾随空格, 写一个替代的前瞻:一个“白色”字符序列 或文本结尾。

因此整个正则表达式可以是:

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

当然,正如 Pointy 所说,将反斜杠加倍。