還沒實現目前通行的正則語法,但已實現它的等價形式,下一步只需支持自動編譯即可。

克萊尼代數中的三種運算:選擇、順序、重複,分別對應 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
8k 声望542 粉丝

[链接]