猿问

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

我正在尝试为正则表达式创建匹配项,但它一直说它为“ null”。我以完全相同的方式声明了一个不同的变量,它可以将值拉回原来的值。

  • 我已经确保ecommerceRegEx安慰了它的价值。

  • 我已确保ecommercePortalAppointmentTime安慰了它的价值。

  • 我在.exec中添加了一个等待,该等待用于其他变量声明。

  • 我确保所有内容的拼写正确,并且所有变量均被正确引用。

//RegEx I am using

var ecommerceRegEx = /((?<time>\d+:\d+) (?<modifier>[AP])M (?<timezone>[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(await ecommercePortalAppointmentTime)


//Console.log I am verifying the value is returned correctly

console.log("Ecomm Match: " + ecommercePortalMatch)


//Returns 'null'

预期结果:应该使用每个组的值创建一个数组。例如,如果字符串是:“您的约会是CDT的9:00 AM”,则数组应为[9:00,AM,CDT]


实际结果:返回“ null”


Helenr
浏览 199回答 2
2回答

蝴蝶不菲

摆脱正g则表达式中的修饰符。仅.exec()当在循环中使用regexp来查找单个字符串中的所有匹配项时,才应使用此方法。它使regexp记住字符串在字符串中匹配结束的位置,以便下一个调用可以在此之后查找匹配项。但是,如果将regexp与其他字符串一起使用,它将开始从在前一个字符串中找到匹配项的索引中查找该字符串。如果在此字符串中的匹配项之后,它将找不到它。g当.match()用于返回数组中某个正则表达式的所有匹配项时,该修饰符也很有用(但随后您将无法获取捕获组,这就是您的原因),并使用.replace()来替换所有匹配项。

千巷猫影

await您内部的第二个ecommerceRegEx.exec没有意义。您已经习惯await了获取该变量。另外,您的正则表达式也不是有效的JavaScript正则表达式,因为JS不支持命名捕获组。看起来当您在regex101.com上调试时,您使用了PHP选项。您可以在左侧菜单上进行更改。试试这个://RegEx I am usingvar ecommerceRegEx = /((\d+:\d+) ([AP])M ([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(ecommercePortalAppointmentTime)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答