在做国际化尝试的时候,用到了 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
}
上次更新: 7/7/2020, 11:00:09 PM