node.js - 如何使 Typescript/ts-node 接受后向断言(ECMAScript 2018 功能)?

标签 node.js regex typescript

我有一个使用lookbehind的正则表达式:

(?<!\S)\'\S(.*?)\S\'(?!\S)

这是一个 ES2018功能。

我也在使用 Typescript,所以我使用 ts-node 运行我的代码.

运行代码时,出现此错误:

SyntaxError: Invalid regular expression: /(?<!\S)\'\S(.*?)\S\'(?!\S)/:
Invalid group

但是,这样做可以成功运行代码:

node --harmony script.js

我尝试将其添加到我的 tsconfig.json 中:

{
  "compilerOptions": {
    "target": "es6",
    "lib": [
      "ES2018" // I also tried es2018. No luck.
    ],
    "module": "commonjs",
    "outDir": "out",
    "sourceMap": true
  }
}

但我遇到了同样的错误。

有什么建议吗?

注意:我通过 nvmnode 更新到版本 13。执行 node script.js 有效,但执行 ts-node script.ts 无效。我已经拥有最新版本的 ts-node,所以我不知道该怎么做。

最佳答案

Lookbehind 首次在 Node 版本 8 中引入,但由于(当时)它是一个实验性功能,因此需要 --harmony 标志(它启用实验性功能,例如新语法,但目前还没有被认为是 100% 可靠和稳定)。让 ts-node 使用 harmony 标志运行 Node 有点难看 - 您必须运行 native Node 并让它预加载 ts-node,如下所示:

node --harmony -r ts-node/register index.ts

(确保 ts-node 为 installed locally )

Lookbehind 毕业于 Harmony in node 10 ,因此,如果您将 Node 更新到版本 10,您将能够在没有 Harmony 标志的情况下运行 Lookbehind。(看起来版本 9.11.2 也支持它)

关于node.js - 如何使 Typescript/ts-node 接受后向断言(ECMAScript 2018 功能)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60014768/

相关文章:

javascript - 如何使用 Mongoose 将两个元素分组?

php - 收到cURL错误: Empty reply from server

javascript - socket.io 如何从客户端获取参数?

javascript - 如何自动插入/添加冒号 ( :) after every 2 character in angular

javascript - 从 TypeScript 对象中删除动态键

javascript - 如何在 Angular 中预填充 ngselect?

javascript - node.js setTimeout() 工作吗?

c# - 如何从文本中过滤 URL 和电话号码,除非它们以 *** 开头

java - 如何在java模式中创建 "or"语句?

javascript - 用于替换两个选项之间字符的正则表达式