js 正则: `^(ab|a)$` 与 `^[ab|a]$` 匹配的值不同

(ab|a) [ab|a] (a|b) [a|b] 基本是等价的。(完全不等价,一时脑抽)

但是为何:^(ab|a)$^[ab|a]$ 匹配的值不同?

  • ^(ab|a)$ 匹配 aba

  • ^[ab|a]$ 匹配 ab

阅读 6.2k
6 个回答

[]和()是不一样的,在[]里面元字符将失去原本特殊的含义,变成只是字符本身,所以[a|b]是可以匹配里面三个字符中的任意一个,而(a|b)是匹配a或者b并作为一个分组。
说的不对的也请大家纠正

() 和 [] 的用法是不一样的, 在 [] 中只有2种转义: ^ 开头, 或者 1-9 这样表示范围的
另外还有一个坑爹的事, [] 只能匹配单个字符, 比如你汉子就会被拆开成 2 个 字符 , 无法匹配到

新手上路,请多包涵

正则表达式中的(...)[...]并不是等价的吧。(...)代表的是一个分组里面包含的是正则表带式并可以被后文引用;而[...]代表的是字符集合,匹配所包含的任意一个字符,并不能被后面的表达式引用。

[ab]的意思是要么匹配a要么匹配b,并不是匹配ab。

/^[ab|a]$/

这个是匹配a,b,|

新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题