正则表达式之 中括号专题

/[xyz]/ 的示意图为

image.jpeg

只要匹配到其中之一就可以,这个东东并不是贪婪模式的,在不开全局匹配的情况下,使用改表达式去匹配 “hhhzxyz” ,会只匹配到一个z,即第一个字母z,开了全局匹配也就是 /xyz/g 会匹配到zxyz 这四个字母。

也就是说一个中括号无论内容多么复杂,都只会匹配出一个字符出来而已!

另外一个需要注意的点就是,中括号其实是一个分支选择结构,任何字符在里面都算作一个分支,也就是说 全部是“或”的关系;

我们来看一个例子

const reg2 = /[asd*?sf]{2,4}/;

const str2 = "can you speak asd?";

console.log(str2.match(reg2)); //["asd?"]

这个匹配出来的结果是 asd? 中间的星号被跳过了?我们还是从原理看问题,匹配权是整个中括号,去匹配第一个字符c ,没有匹配成功,于是右移匹配a,成功,因为后边还有一个大括号限制次数,所以放入临时状态,继续匹配n,失败,所以从临时状态中移除。右移,直到匹配asd全部成功,因为{2,4}这个量词是贪婪的,所以会尽可能多的匹配,于是又一次匹配,后面是个问号,所以满足中括号里面的问号,于是匹配成功,返回结果。 从最后的问号,很明显的看出来中括号的内容都是并列存在的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容