一个简易正则引擎

还没实现现在通行的正则语法,但已实现它的等价情势,下一步只需支撑自动编译即可。

克莱尼代数中的三种运算:选择、顺序、重复,分别对应 Object 的 key,子 Object,引用到父 Object 的子 Object。

var r = {}, a = {b: {b: ""}}; 
    a.a = a; // a*bb
    r.a = a; // aa*bb

var c = {c: {c: {c: {"": "", c: {"": "", c: ""}}}}}; // c{3,5}

var l = {l: {i: {l: {y: ""}}, a: {d: {y: ""}}}}; // lily|lady

function test(s, r) {
    for (var i in s) {
        var j = s[i];

        if (typeof r[j] !== "undefined")
            r = r[j];
        else
            return false; 
    }

    if (r === "")
        return true;

    if (r[""] === "")
        return true;

    return false;
}

console.log(test("aaaabb", r), test("bb", r), test("aaaa", r));
console.log(test("aaaabb", a), test("bb", a), test("aaaa", a));

console.log(test("cc", c), test("ccc", c), test("cccc", c), test("ccccc", c), test("cccccc", c));

console.log(test("lily", l), test("lady", l), test("ladysmith", l), test("lad", l));
    原文作者:bf
    原文地址: https://segmentfault.com/a/1190000001630959
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞