. 元字符用于查找单个字符,除了换行和行结束符。
*元字符用于匹配它前面的单个字符零次或者多次。
(1)模式为:B.*Forta ,字符串BForta可以被匹配到
let str = 'BForta';
str.match(/B.*Forta/);
疑问点:这里.*到底是匹配到什么?
let str = 'Ben Forta';
str.match(/B.*Forta/);
疑问点:这里.*匹配到什么?
(2)模式为:B.* Forta ,字符串Ben Forta可以被匹配到
let str = 'Ben Forta';
str.match(/B.* Forta/);
疑问点:这里的.*又是匹配到什么?
一直没想明白 .元字符只是匹配除换行和结束符的单个字符,它后面的*元字符也只是匹配.匹配到的那个单字符的基础上匹配零次或者多次。
为啥上面的三种情况,.*可以匹配到?希望可以单独解释下它们两个分别匹配到什么?
模式为:B.*Forta ,字符串BForta可以被匹配到
当字符串为BForta时,.*只是匹配到了B后面的那个位置;当字符串为Ben Forta时,.*匹配到的是'en ',你加个分组就可以看到它匹配到的内容了
在线工具解析:
代码解析:
'BForta'.match(/B(.*)Forta/);
'Ben Forta'.match(/B(.*)Forta/);
模式为:B.* Forta ,字符串Ben Forta可以被匹配到
当此时字符串为'Ben Forta'时,.*匹配到的是'en',你可以加个分组查看
在线工具解析:
代码解析:
'Ben Forta'.match(/B(.*) Forta/);
总结:
因为.*相当于.{0,},也就是.*是可以匹配0次的,此时它可以匹配一个位置而已。但.*又是贪婪的,它会竟可能的去匹配,至于最后能匹配多少字符,是要跟它后面的其他子表达式去协调匹配,协调的过程就是回溯的过程,这个回溯你理解了,就明白了
###.就是任意字符,*就是任意次数,*并不是前一个匹配“字符”的重复,而是匹配“模式”的重复。
###它后面的\*元字符也只是匹配.匹配到的那个单字符的基础上匹配零次或者多次。
这句话是错误的。
就拿斗地主来比喻,你手上有三张癞子牌,你使用其中一个当作5,但是另外两张癞子不是被锁定为5的。
第一个案例,是*
在起作用,他为0,匹配到的是空字符串
第二个案例,.
匹配到了e、n和空格
第三个案例,.
匹配到了e、n