code: function replaceSpermies (version) {
    return version.trim().replace(expressions.parseSpermy,
                                  function (v, gtlt, M, m, p) {
      if (gtlt) throw new Error(
        "Using '"+gtlt+"' with ~ makes no sense. Don't do it.")
      if (!M || M.toLowerCase() === "x") {
        return "*"
      }
      if (!m || m.toLowerCase() === "x") {
        return ">="+M+".0.0 <"+(+M+1)+".0.0"
      }
      if (!p || p.toLowerCase() === "x") {
        return ">="+M+"."+m+".0 <"+M+"."+(+m+1)+".0"
      }
      return ">="+M+"."+m+"."+p+" <"+M+"."+(+m+1)+".0"
    })
  }
docs: ~, ~> --> * (any, kinda silly) ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0