用正則替換實現自定義函數

emmm,一個非常偷懶的自定義函數方式,估計沒人這樣做過。
話不多說,先貼代碼爲敬。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>函數替換規則demo</title>
</head>
<body>

<p>定義函數:avg(i,j)爲:(i+j)/2</p>
    <p>用戶調用函數:avg(a,b)</p>
<button onclick="myFunction()">替換</button>
<p id="demo">avg(a,b)</p>
<script>
function myFunction() {
    //函數定義
    var str = "avg(i,j)";
    var def = "(i+j)/2";
    
    //正則規則
    var defname = str.match(/[A-z]+/);
    var pams = str.match(/\(([^)]*)\)/);
    var pam = pams[1].match(/[A-z]+/g);

    //var rule[defname] = def;
    //這裏應該對函數名及對應定義進行存儲...但是我不會
    
    //調用函數
    var inputstr = "avg(a,b)";
    
    //正則規則
    var inputpams = inputstr.match(/\(([^)]*)\)/);
    var inputpam = inputpams[1].match(/[A-z]+/g);
    
    var result = def;
    for (var i = 0; i<pam.length; i++)
    {
        var tmp = result;
        var result = tmp.replace(new RegExp(pam[i],'g'),inputpam[i]);
    }
    
    document.getElementById("demo").innerHTML =
        "函數名:" + defname
        + "<br>參數個數:" + pam.length
        + "<br>形參:" + pam
        + "<br>使用替換規則:" + result;
    
}
</script>

</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章