gpt4 book ai didi

regex - ECMAScript 正则表达式是否匹配其语法字符?

转载 作者:行者123 更新时间:2023-12-05 02:26:50 26 4
gpt4 key购买 nike

我指的是 https://tc39.es/ecma262/#sec-regexp-regular-expression-objects 中定义的 ECMAScript 正则表达式语法.

我通过几个在线资源检查了以下模式如何在正则表达式中匹配。

Pattern: /[[]]/

他们都包括那个

[ -> Match any character in the character set
[ -> Matches a `[` character
]

] -> Matches a `]` character

我知道字符集是如何匹配的,但我不明白为什么匹配最后一个右括号(])。这不是正则表达式中的语法错误吗,因为根据定义的语法,PatternCharacter 只能是 SourceCharacter 而不是 SyntaxCharacter ECMAScript 规范(https://tc39.es/ecma262/#prod-PatternCharacter)?右括号 (]) 是一个 SyntaxCharacter

PatternCharacter ::
SourceCharacter but not SyntaxCharacter

最佳答案

在附件 B Web 浏览器的附加 ECMAScript 特性 中,B.1.2 Regular Expressions Patterns 部分同样的规范,它说:

The syntax of 22.2.1 is modified and extended as follows. These changes introduce ambiguities that are broken by the ordering of grammar productions and by contextual information. When parsing using the following grammar, each alternative is considered only if previous production alternatives do not match.

我们发现 Term 可以是 ExtendedAtom,而 ExtendedPatternCharacter 又可以是 ExtendedPatternCharacter,定义为:

SourceCharacter but not one of ^ $ \ . * + ? ( ) [ |

所以这里 ] 是允许的。

annex B本规范的介绍:

The ECMAScript language syntax and semantics defined in this annex are required when the ECMAScript host is a web browser. The content of this annex is normative but optional if the ECMAScript host is not a web browser.

有趣的是,NodeJS 中也提供了这种“额外”行为,尽管根据本规范它不必这样做。

关于regex - ECMAScript 正则表达式是否匹配其语法字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73623401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com