在做国际化尝试的时候,用到了 AST 来转化读取的 JS 文件,由于需要将读取的 JS 文件装换为对象的形式,但是使用 JSON.parse()这个方法时,注释没办法转换,所以需要在转换前移除注释。因此就有了这个算法,这个算法也是 LeetCode 种的一题,只不过形式略有不同。下面是算法代码:
/**
* @param {string[]} source
* @return {string[]}
*/
const removeComments = (str) => {
let length = str.length
let indexline = -1
let indexbb = -1
let i = 0
while (i < length - 1) {
let fi = str.charAt(i)
let se = str.charAt(i + 1)
if (fi == "/" && se == "/") {
indexline = i
//删除直到\n
while (i < length && str.charAt(i) != "\n") {
i++
}
str = str.substr(0, indexline) + str.substr(i + 1, length)
length -= i - indexline
i = indexline - 1
} else if (fi == "/" && se == "*") {
//找到下一个*/
indexbb = i
i += 2
while (
i < length - 1 &&
!(str.charAt(i) == "*" && str.charAt(i + 1) == "/")
)
i++
str = str.substr(0, indexbb) + str.substr(i + 2, length)
length -= i + 2 - indexbb
i = indexbb - 1
}
i++
}
return str
}