为了账号安全,请及时绑定邮箱和手机立即绑定

当其他人撤回其值时,regex.exec返回“ null”

当其他人撤回其值时,regex.exec返回“ null”

Helenr 2021-05-02 16:41:42
我正在尝试为正则表达式创建匹配项,但它一直说它为“ null”。我以完全相同的方式声明了一个不同的变量,它可以将值拉回原来的值。我已经确保ecommerceRegEx安慰了它的价值。我已确保ecommercePortalAppointmentTime安慰了它的价值。我在.exec中添加了一个等待,该等待用于其他变量声明。我确保所有内容的拼写正确,并且所有变量均被正确引用。//RegEx I am usingvar ecommerceRegEx = /((?<time>\d+:\d+) (?<modifier>[AP])M (?<timezone>[A-Z]+))/gm//Object I am getting the DOM property forvar ecommercePortalAppointmentTime = await Selector('[class="availability-option"]').find('span').nth(0).innerText//Match I am attempting to createvar ecommercePortalMatch = ecommerceRegEx.exec(await ecommercePortalAppointmentTime)//Console.log I am verifying the value is returned correctlyconsole.log("Ecomm Match: " + ecommercePortalMatch)//Returns 'null'预期结果:应该使用每个组的值创建一个数组。例如,如果字符串是:“您的约会是CDT的9:00 AM”,则数组应为[9:00,AM,CDT]实际结果:返回“ null”
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

摆脱正g则表达式中的修饰符。仅.exec()当在循环中使用regexp来查找单个字符串中的所有匹配项时,才应使用此方法。它使regexp记住字符串在字符串中匹配结束的位置,以便下一个调用可以在此之后查找匹配项。

但是,如果将regexp与其他字符串一起使用,它将开始从在前一个字符串中找到匹配项的索引中查找该字符串。如果在此字符串中的匹配项之后,它将找不到它。

g.match()用于返回数组中某个正则表达式的所有匹配项时,该修饰符也很有用(但随后您将无法获取捕获组,这就是您的原因),并使用.replace()来替换所有匹配项。


查看完整回答
反对 回复 2021-05-20
?
千巷猫影

TA贡献1829条经验 获得超7个赞

await您内部的第二个ecommerceRegEx.exec没有意义。您已经习惯await了获取该变量。


另外,您的正则表达式也不是有效的JavaScript正则表达式,因为JS不支持命名捕获组。看起来当您在regex101.com上调试时,您使用了PHP选项。您可以在左侧菜单上进行更改。


试试这个:


//RegEx I am using

var ecommerceRegEx = /((\d+:\d+) ([AP])M ([A-Z]+))/gm


//Object I am getting the DOM property for

var ecommercePortalAppointmentTime = await Selector('[class="availability-option"]').find('span').nth(0).innerText


//Match I am attempting to create

var ecommercePortalMatch = ecommerceRegEx.exec(ecommercePortalAppointmentTime)


查看完整回答
反对 回复 2021-05-20
  • 2 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信