正则表达式之 中括号专题

/[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}这个量词是贪婪的,所以会尽可能多的匹配,于是又一次匹配,后面是个问号,所以满足中括号里面的问号,于是匹配成功,返回结果。 从最后的问号,很明显的看出来中括号的内容都是并列存在的。

你可能感兴趣的:(正则表达式之 中括号专题)