24h購物| | PChome| 登入
2013-10-06 21:13:05| 人氣3,905| 回應1 | 上一篇 | 下一篇

[Javascript][簡易] 去除註解

推薦 0 收藏 0 轉貼0 訂閱站台



用 JavaScript 寫可以去除程式註解功能
從 C/C++ 下手來看,可能只有 // & /**/,要特別考慮註解中的註解。
此外還要特別小心 format string 中的註解,各種遞迴條件。

這是一個非常隨意的版本,當作是 javascript 的 function 練習。
判斷的地方還是用 C/C++ 的風格寫一次,對於內建 method 不熟悉。



<html>
    <head>
            <style type="text/css">
            .block {
                width: 500px;
                height: 500px;
                background-color:#FFFFFF;
            }
            </style>
            <script>
                function clearComment(code) {
                    var ret = "";
                    var leftComment = false;
                    var doubleSlash = false;
                    var inFormatString = false;
                    for(var i = 0; i < code.length; i++) {
                        if(inFormatString == true && leftComment == false && doubleSlash == false) {
                            if(code[i] == '"' && code[i-1] != '\\')
                                inFormatString = false;
                        } else if(code[i] == '"' && inFormatString == false && leftComment == false && doubleSlash == false) {
                            inFormatString = true;
                        }
                        if(inFormatString == false) {
                            if(i+1 < code.length && code[i] == '/' && code[i+1] == '*') {
                                leftComment = true;
                                i++;
                                continue;
                            }
                            if(i+1 < code.length && code[i] == '/' && code[i+1] == '/')
                                doubleSlash = true;
                            if(leftComment) {
                                if(i+1 < code.length && code[i] == '*' && code[i+1] == '/') {
                                    leftComment = false;
                                    i++;
                                }
                                continue;
                            }
                        }
                        if(code[i] == '\n')    {
                            doubleSlash = false;
                        }
                        if(doubleSlash)
                            continue;
                        ret += code[i];
                    }
                    return ret;
                }
                function transcode() {
                    var input = document.getElementById('code').value;
                    document.getElementById('transcode').value = clearComment(input);
                }
                var sample = "char* x =\"/*this looks like a comment, but you can not remove it.*/\";";
                document.write('<textarea class="block" id="code">' + sample + '</textarea>');
            </script>
    </head>
    <body>
        <button id="trans" >Trans</button>
        <textarea class="block" id="transcode"></textarea>
    </body>
</html>

台長: Morris
人氣(3,905) | 回應(1)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: [學習]JavaScript |
此分類下一篇:[Javascript] Action 定時練習
此分類上一篇:[JavaScript] HTML 輸出練習

K
try
replace(/\/\*[ \w\s\W]*\*\//ig,'')
2013-10-31 12:15:41
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文