(\d)(?=(\d{3})+$)
我知道它的定义是匹配字符串的结尾。但是在前瞻里面好像有点难以理解。比如,对于字符串'1234567890',如果不加$,匹配的结果就是1 2 3 4 5 6 7,如果加上$,结果就是1 4 7,好像是从后向前匹配的。请教,在这里是否有特殊含义?
谢谢!
(\d)(?=(\d{3})+$)
我知道它的定义是匹配字符串的结尾。但是在前瞻里面好像有点难以理解。比如,对于字符串'1234567890',如果不加$,匹配的结果就是1 2 3 4 5 6 7,如果加上$,结果就是1 4 7,好像是从后向前匹配的。请教,在这里是否有特殊含义?
谢谢!
$表示匹配末尾。
可以看MDN上的正则知识点。MDN regexp
x(?=y)表示向前正向匹配
只有当 x 后面紧跟着 y 时,才匹配 x。 例如,/Jack(?=Sprat)/ 只有在 'Jack' 后面紧跟着 'Sprat' 时,才会匹配它。/Jack(?=Sprat|Frost)/ 只有在 'Jack' 后面紧跟着 'Sprat' 或 'Frost' 时,才会匹配它。然而,'Sprat' 或 'Frost' 都不是匹配结果的一部分。
我再推荐几个网址吧:
图形化显示正则
在线正则校验,选择JavaScript
正则表达式前端使用手册
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
个人更新颖更好理解的观点,
(?=表达式)
匹配一个位置,这个位置后面跟着表达式
,同样$
也匹配一个位置,是这个字符串的结尾(行末)。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
加一个结尾,因此可以匹配。而对于2
,345
,345678
都没有结尾,34567890
虽然有结尾,但是后面没有3n
个数字,因此不匹配。