0

也许错过了它,但还没有找到一个正则表达式(或其他方式)来简洁地完成我想要做的事情。

我正在生成包含自定义 HTML 标记的长字符串,这些标记将显示为 HTML。我分别生成两个字符串,它们具有相同长度的文本并且需要保持字符对齐,但每个都有自己独特的标记。例如(虽然会更长):

xxxxx<mytag>nnnn</mytag>xxxx

<mytag2>xxxxx</mytag2>nnnn<mytag3>xxxx</mytag3>

我想将它们分成较短的字符串(例如 80 个字符),以便保持对齐。显然,由于标记不同,我不能简单地按字符数进行拆分。我还需要维护 HTML 标签。

最终,它们将显示为对齐,一个字符串在另一个之上。我对其他方法持开放态度,但需要维护指针事件(自定义标签将解析为在鼠标悬停时显示工具提示的跨度)。字符串级别的解决方案将是理想的,因为该功能将在这个单个 HTML 元素之外有用。我正在使用 AngularJS,该函数每次击键都会运行,所以不能太密集。

任何帮助表示赞赏。谢谢。

4

1 回答 1

0

我不认为正则表达式在这种情况下会有用。

我选择了基本的函数演练方法,在这里效果很好:

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>"]
于 2013-09-20T06:14:51.813 回答