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>
try
replace(/\/\*[ \w\s\W]*\*\//ig,'')