首页 > 解决方案 > 当其他人撤回他们的值时,regex.exec 返回“null”

问题描述

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

//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”,则数组应该是 [9:00, AM, CDT]

实际结果:返回 'null'

标签: javascriptregex

解决方案


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)

推荐阅读