正则表达式,用于在JavaScript中将单行长文本包装在空白处



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

这很好,但问题是函数不关心是否有空格,甚至在单词内部也会换行。因此,我试图通过添加一个正的后备检查来重写正则表达式:

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

它与在线regex测试程序/调试器一起工作,但我的浏览器发现有一个语法错误"无效的regexp组"。我搜索了一段时间,发现JavaScript可能不支持正向外观。我再次重写代码,结果是:

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

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

最佳,基督教

我想对您的regex的上一个版本提出一些改进。

  1. s*启动regex,原因很快就会清楚。

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

  3. 为了正确地为最后一个区块提供服务,可能没有任何尾部空间,编写前瞻性作为一种替代方案:要么是一系列"白色"字符或文本末尾。

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

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

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

最新更新