Regex exec函数在Javascript中未返回正确的结果

Regex exec函数在Javascript中未返回正确的结果,javascript,regex,function,Javascript,Regex,Function,我正在尝试编写一个函数,它将解析一个字符串,格式为7:55am-9:10am(TR)8:10am-9:00am(W),并输出一个多维]数组,其中包含regex结果(ex[[7:55am,9:10am,TR],[7:55am,9:00am,W]) 这是我目前的职能: function parseClassTime(times) { console.log("Input: " + times); var timeArr = []; var finalArr = [];

我正在尝试编写一个函数,它将解析一个字符串,格式为
7:55am-9:10am(TR)8:10am-9:00am(W)
,并输出一个多维]数组,其中包含regex结果(ex
[[7:55am,9:10am,TR],[7:55am,9:00am,W]

这是我目前的职能:

function parseClassTime(times) {
    console.log("Input: " + times);
    var timeArr = [];
    var finalArr = [];
    regexStr = /(\d{1,2}:\d{2}[ap]m) - (\d{1,2}:\d{2}[ap]m) \((\w{1,5})\)/g;
    if (times.indexOf(") ") > -1) {
        times = times.replace(") ", ")&");
        timeArr = times.split("&");
    } else {
        timeArr.push(times);
    }
    console.log("timeArr: " + timeArr);
    for (i = 0; i < timeArr.length; i++) {
        console.log(i + ":" + timeArr[i]);
        console.log("regexResult: " + regexStr.exec(timeArr[i]));
    }
};
就我的一生而言,我无法发现那
null
是从哪里来的。在对
.exec()
的两次调用之间,正则表达式字符串是否发生了变化


请让我知道你的想法

这就是
[RegExp.exec()][1]
的工作原理:在第一次匹配后,
lastIndex
属性被设置为20,而您没有重置它。第二次,它无法匹配任何东西,因为它开始寻找一个位置20匹配。这一切都是这样发生的,因为正则表达式是用全局修饰符
/g
构建的

如果正则表达式使用
“g”
标志,则可以多次使用
exec()
方法来查找同一字符串中的连续匹配项。执行此操作时,搜索从正则表达式属性指定的
str
子字符串开始

您可以手动重置
regexStr.lastIndex

函数parseClassTime(次){
console.log(“输入:+次);
var timeArr=[];
var finalArr=[];
regexStr=/(\d{1,2}:\d{2}[ap]m)-(d{1,2}:\d{2}[ap]m)\(\w{1,5})\)/g;
if(times.indexOf(“)”>-1){
时间=时间。替换(“)”,“&”;
timeArr=时间分割(&);
}否则{
timeArr.push(次);
}
console.log(“timeArr:+timeArr”);
对于(i=0;iregexStr.lastIndex=0;//只需将
{0,5}
更改为
{1,5}
。我认为它也匹配零长度。首先,您有
am
pm
悬挂,使用
[ap]m
,然后-正如上面的注释所述-
{0,5}
可以匹配0个字符。请尝试
(\d{1,2}:\d}[ap]m)-(\d}[ap]m)\(\w+)
。谢谢大家的建议!我更改了它,但仍然得到一个空值。代码有问题。循环的上限应该是array.length-1吗?
Input: 7:55am - 9:10am (TR) 8:10am - 9:00am (W)
timeArr: 7:55am - 9:10am (TR),8:10am - 9:00am (W)
0:7:55am - 9:10am (TR)
regexResult: 7:55am - 9:10am (TR),7:55am,9:10am,TR
1:8:10am - 9:00am (W)
regexResult: null