我有一个带有回顾断言的正则表达式,但 ESLint 似乎无法识别其有效性。然而前瞻断言是可以的。
我可以使用最新版本的 ESLint(我使用了 在线演示)和非常简单且人为的示例来重现此问题。
前瞻断言:如果后面跟着
ESLint将
ESLint无法识别
我可以使用最新版本的 ESLint(我使用了 在线演示)和非常简单且人为的示例来重现此问题。
前瞻断言:如果后面跟着
d
,则匹配 b
(仅匹配 b
)。'bd'.match(/b(?=d)/) //=> ['b']
'be'.match(/b(?=d)/) //=> null
ESLint将
/b(?=d)/
识别为有效的正则表达式:
回顾断言:如果前面跟着a
,则匹配b
(仅限b
):
'ab'.match(/(?<=a)b/) //=> ['b']
'eb'.match(/(?<=a)b/) //=> null
ESLint无法识别
/(?<=a)b/
作为有效的正则表达式:
问题:我的正则表达式有什么问题导致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,
"no-unexpected-multiline": 2,
"no-unreachable": 2,
"no-unsafe-finally": 2,
"no-unsafe-negation": 2,
"no-unused-labels": 2,
"no-unused-vars": 2,
"no-useless-catch": 2,
"no-useless-escape": 2,
"no-with": 2,
"require-yield": 2,
"use-isnan": 2,
"valid-typeof": 2
},
"env": {}
}
"ecmaVersion": 9
,默认值为5
,这相当老旧。 - Wiktor Stribiżew