关于正则表达式,.*组合使用问题

发布于 2022-09-12 01:27:02 字数 612 浏览 23 评论 0

. 元字符用于查找单个字符,除了换行和行结束符。
*元字符用于匹配它前面的单个字符零次或者多次。
(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/);

疑问点:这里的.*又是匹配到什么?

一直没想明白 .元字符只是匹配除换行和结束符的单个字符,它后面的*元字符也只是匹配.匹配到的那个单字符的基础上匹配零次或者多次。
为啥上面的三种情况,.*可以匹配到?希望可以单独解释下它们两个分别匹配到什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

死开点丶别碍眼 2022-09-19 01:27:02

模式为:B.*Forta ,字符串BForta可以被匹配到

当字符串为BForta时,.*只是匹配到了B后面的那个位置;当字符串为Ben Forta时,.*匹配到的是'en ',你加个分组就可以看到它匹配到的内容了

在线工具解析:
zz.png

代码解析:

'BForta'.match(/B(.*)Forta/);
'Ben Forta'.match(/B(.*)Forta/);

zzz.png


模式为:B.* Forta ,字符串Ben Forta可以被匹配到

当此时字符串为'Ben Forta'时,.*匹配到的是'en',你可以加个分组查看

在线工具解析:
k.png

代码解析:

'Ben Forta'.match(/B(.*) Forta/);

kk.png

总结:

因为.*相当于.{0,},也就是.*是可以匹配0次的,此时它可以匹配一个位置而已。但.*又是贪婪的,它会竟可能的去匹配,至于最后能匹配多少字符,是要跟它后面的其他子表达式去协调匹配,协调的过程就是回溯的过程,这个回溯你理解了,就明白了
栀子花开つ 2022-09-19 01:27:02

.就是任意字符,*就是任意次数,*并不是前一个匹配“字符”的重复,而是匹配“模式”的重复。

绝影如岚 2022-09-19 01:27:02

它后面的\*元字符也只是匹配.匹配到的那个单字符的基础上匹配零次或者多次。这句话是错误的。

就拿斗地主来比喻,你手上有三张癞子牌,你使用其中一个当作5,但是另外两张癞子不是被锁定为5的。

第一个案例,是*在起作用,他为0,匹配到的是空字符串

第二个案例,.匹配到了e、n和空格

第三个案例,.匹配到了e、n

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文