parseHTML2Vnode

var startReg = new RegExp(/^<[^/>]+>/);
var selfCloseReg = new RegExp(/^<[^<>/]+/>/);
var endReg = new RegExp('^</[^>]+>');
var textNode = new RegExp(/^[^<]+/);

function parse(html) {
    var stack = [];
    var res;
    while (html) {
        var startTag = startReg.exec(html);
        if (startTag) {
            res = startTag[0];
            stack.push(res);
            html = html.slice(res.length);
            continue;
        }
        var textTag = textNode.exec(html);
        if (textTag) {
            res = textTag[0];
            stack.push(res);
            html = html.slice(res.length);
            continue;
        }
        var endTag = endReg.exec(html);
        if (endTag) {
            res = endTag[0];
            stack.push(res);
            html = html.slice(res.length);
            continue;
        }
        var selfCloseTag = selfCloseReg.exec(html);
        if (selfCloseTag) {
            res = selfCloseTag[0];
            stack.push(res);
            html = html.slice(res.length);
            continue;
        }
    }
    return stack;
}

var template = '<div id="main">name</div><span class="loading"><input type="text" />name</span>';

console.log(parse(template));
原文地址:https://www.cnblogs.com/jiajiaobj/p/13654967.html