ESLint 和lookbehind 断言

我有一个正则表达式,其中包含 ESLint 似乎不认为有效的后向断言。然而,前瞻断言是可以的。

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

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

'bd'.match(/b(?=d)/) //=> ['b']
'be'.match(/b(?=d)/) //=> null

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

http://img1.mukewang.com/64b8a18f0001372911340344.jpg

Lookbehind 断言:匹配b(且仅b)如果前面是a

'ab'.match(/(?<=a)b/) //=> ['b']
'eb'.match(/(?<=a)b/) //=> null

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

http://img4.mukewang.com/64b8a19f0001c2f911310337.jpg

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


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


{

    "parserOptions": {

        "ecmaVersion": 5,

        "sourceType": "script",

        "ecmaFeatures": {}

    },

    "rules": {

        "constructor-super": 2,

        "for-direction": 2,

        "getter-return": 2,

        "no-async-promise-executor": 2,

        "no-case-declarations": 2,

        "no-class-assign": 2,

        "no-compare-neg-zero": 2,

        "no-cond-assign": 2,

        "no-const-assign": 2,

        "no-constant-condition": 2,

        "no-control-regex": 2,

        "no-debugger": 2,

        "no-delete-var": 2,

        "no-dupe-args": 2,

        "no-dupe-class-members": 2,

        "no-dupe-else-if": 2,

        "no-dupe-keys": 2,

        "no-duplicate-case": 2,

        "no-empty": 2,

        "no-empty-character-class": 2,

        "no-empty-pattern": 2,

        "no-ex-assign": 2,

        "no-extra-boolean-cast": 2,

        "no-extra-semi": 2,

        "no-fallthrough": 2,

        "no-func-assign": 2,

        "no-global-assign": 2,

        "no-import-assign": 2,

        "no-inner-declarations": 2,

        "no-invalid-regexp": 2,

        "no-irregular-whitespace": 2,

        "no-misleading-character-class": 2,

        "no-mixed-spaces-and-tabs": 2,

        "no-new-symbol": 2,

        "no-obj-calls": 2,

        "no-octal": 2,

        "no-prototype-builtins": 2,

        "no-redeclare": 2,

        "no-regex-spaces": 2,

        "no-self-assign": 2,

        "no-setter-return": 2,

        "no-shadow-restricted-names": 2,

        "no-sparse-arrays": 2,

        "no-this-before-super": 2,

        "no-undef": 2,

    },

    "env": {}

}

javascript正则表达式埃斯林特


开心每一天1111
浏览 152回答 1
1回答

qq_花开花谢_0

您可以参考指定解析器选项: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": {}    },
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript