请问下面的正则表达式中$是什么含义?

(\d)(?=(\d{3})+$)

我知道它的定义是匹配字符串的结尾。但是在前瞻里面好像有点难以理解。比如,对于字符串'1234567890',如果不加$,匹配的结果就是1 2 3 4 5 6 7,如果加上$,结果就是1 4 7,好像是从后向前匹配的。请教,在这里是否有特殊含义?
谢谢!

阅读 3.8k
3 个回答

个人更新颖更好理解的观点,(?=表达式)匹配一个位置,这个位置后面跟着表达式,同样$也匹配一个位置,是这个字符串的结尾(行末)。
http://zonxin.github.io/post/...

(\d)(?=(\d{3})+), 匹配一个数字跟一个位置,从这个位置开始后面跟着3的倍数个的数字。也就是说,他匹配一个数字后面跟3n个字符。1234567890 对于1后面有234567890 9个字符,所以可以匹配1。同样2后面跟着2345678 六个字符,所以可以匹配2 ....8后面只跟了90不是3的倍数,因此不匹配...

(\d)(?=(\d{3})+$) 匹配一个数字跟一个位置,从这个位置开始后面跟着3的倍数个的数字然后是一个字符串结尾。对于1,它后面有234567890加一个结尾,因此可以匹配。而对于2345,345678都没有结尾,34567890虽然有结尾,但是后面没有3n个数字,因此不匹配。

$表示匹配末尾。
可以看MDN上的正则知识点。MDN regexp
x(?=y)表示向前正向匹配

只有当 x 后面紧跟着 y 时,才匹配 x。 例如,/Jack(?=Sprat)/ 只有在 'Jack' 后面紧跟着 'Sprat' 时,才会匹配它。/Jack(?=Sprat|Frost)/ 只有在 'Jack' 后面紧跟着 'Sprat' 或 'Frost' 时,才会匹配它。然而,'Sprat' 或 'Frost' 都不是匹配结果的一部分。

我再推荐几个网址吧:
图形化显示正则
在线正则校验,选择JavaScript
正则表达式前端使用手册

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