2013-10-06 21:13:05Morris

[Javascript][簡易] 去除註解



用 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>
K 2013-10-31 12:15:41

try
replace(/\/\*[ \w\s\W]*\*\//ig,'')