ESLint 和后视断言

cus*_*der 5 javascript regex eslint

我有一个带有后视断言的正则表达式,ESLint 似乎认为它无效。然而,前瞻断言很好。

我可以使用最新版本的 ESLint(我使用过在线演示)以及非常简单和人为的示例来重现这个问题。

前瞻断言:匹配b(且仅b)如果后跟d

'bd'.match(/b(?=d)/) //=> ['b']
'be'.match(/b(?=d)/) //=> null
Run Code Online (Sandbox Code Playgroud)

ESLint 识别/b(?=d)/为有效的正则表达式:

在此处输入图片说明

后视断言:匹配b(且仅b)如果前面有a

'ab'.match(/(?<=a)b/) //=> ['b']
'eb'.match(/(?<=a)b/) //=> null
Run Code Online (Sandbox Code Playgroud)

ESLint 无法识别/(?<=a)b/为有效的正则表达式:

在此处输入图片说明

问题:我的正则表达式有什么问题导致 ESLint 抱怨?


上面演示中使用的 ESLint 配置:

'bd'.match(/b(?=d)/) //=> ['b']
'be'.match(/b(?=d)/) //=> null
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 3

您可以参考指定解析器选项参考:

ecmaVersion- 设置为 3、5(默认)、6、7、8、9、10、11 或 12 以指定要使用的 ECMAScript 语法版本。您还可以设置为 2015 年(与 6 相同)、2016 年(与 7 相同)、2017 年(与 8 相同)、2018 年(与 9 相同)、2019 年(与 10 相同)、2020 年(与 11 相同)或 2021 年(与 12) 相同,使用基于年份的命名。

如您所见,默认值为5,表示仅支持 ES5。Lookbehinds符合 ECMAScript 2018,因此您需要确保ecmaVersion至少设置为9

"parserOptions": {
        "ecmaVersion": 9,
        "sourceType": "script",
        "ecmaFeatures": {}
    },
Run Code Online (Sandbox Code Playgroud)