gpt4 book ai didi

javascript - 为什么 Javascript 正则表达式每秒匹配一次?

转载 作者:行者123 更新时间:2023-12-03 12:43:33 26 4
gpt4 key购买 nike

我正在定义一个正则表达式对象,然后在循环中匹配它。准确地说,它有时只匹配 - 每隔一段时间。所以我创建了这个问题的最小工作样本。

我在 Opera 和 Firefox 中尝试了这段代码。两者的行为相同:

>>> domainRegex = /(?:\.|^)([a-z0-9\-]+\.[a-z0-9\-]+)$/g;
/(?:\.|^)([a-z0-9\-]+\.[a-z0-9\-]+)$/g
>>> domainRegex.exec('mail-we0-f174.google.com');
Array [".google.com", "google.com"]
>>> domainRegex.exec('mail-we0-f174.google.com');
null
>>> domainRegex.exec('mail-we0-f174.google.com');
Array [".google.com", "google.com"]
>>> domainRegex.exec('mail-we0-f174.google.com');
null
>>> domainRegex.exec('mail-we0-f174.google.com');
Array [".google.com", "google.com"]
>>> domainRegex.exec('mail-we0-f174.google.com');
null

为什么会这样?这种行为是否记录在案?除了在循环体内定义正则表达式之外,还有其他方法吗?

最佳答案

exec() 按照您描述的方式工作;与 /g修饰符存在,它将返回一个匹配,从 lastIndex 开始每次调用,直到没有更多匹配,此时它返回 nulllastIndex 的值被重置为 0。

但是,因为您使用 $ 锚定了表达式。不会有超过一场比赛,所以你可以使用 String.match() 而是丢失 /g修饰符:

var domainRegex = /(?:\.|^)([a-z0-9\-]+\.[a-z0-9\-]+)$/;
'mail-we0-f174.google.com'.match(domainRegex); // [".google.com", "google.com"]

关于javascript - 为什么 Javascript 正则表达式每秒匹配一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18462784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com