也许错过了,但还没有找到一个正则表达式(或其他方式)来完成我想要简洁地做的事情。
我正在生成包含自定义HTML标记的长字符串,这些标记将显示为HTML。我分别生成两个字符串,它们具有相同长度的文本,需要保持字符对齐,但每个字符串都有自己唯一的标记。例如。 (虽然会更长):
xxxxx<mytag>nnnn</mytag>xxxx
<mytag2>xxxxx</mytag2>nnnn<mytag3>xxxx</mytag3>
我想将它们分成较短的字符串(例如80个字符),以便保持对齐。显然,由于标记不同,我不能简单地按字符数分割。 我还需要维护HTML标记。
最终,它们将显示为对齐方式,其中一个字符串位于另一个字符串之上。我对其他方法持开放态度,但需要维护指针事件(自定义标记将解析为在鼠标悬停时显示工具提示的跨度)。字符串级别的解决方案将是理想的,因为该功能将超出此单个HTML元素。我正在使用AngularJS,该函数运行每次击键,因此不能太强烈。
任何帮助表示赞赏。感谢。
答案 0 :(得分:0)
在这种情况下,我认为正则表达式不会有用。
我选择了基本的函数 - walkthrough方法,它在这里工作得很好:
function splitByLength(str, length) {
var lines = [];
var isInTag = false;
var start = 0;
var count = 0;
var tagLength = 0;
for (i = 0; i < str.length; i++) {
if (str[i] == "<") {
isInTag = true;
}
if (!isInTag) {
count++;
} else {
tagLength++;
}
if (count >= length) {
lines.push(str.substr(start, count+tagLength));
start = count+tagLength;
count = 0;
tagLength = 0;
}
if (str[i] == ">") {
isInTag = false;
}
}
lines.push(str.substr(start));
return lines;
}
示例:
splitByLength("xxxxx<mytag>nnnn</mytag>xxxx", 10)
>>> ["xxxxx<mytag>nnnn</mytag>x", "xxx"]
splitByLength("<mytag2>xxxxx</mytag2>nnnn<mytag3>xxxx</mytag3>", 10)
>>> ["<mytag2>xxxxx</mytag2>nnnn<mytag3>x", "xxx</mytag3>"]