JavaScript析构+正则的字符串解析方法


假设日期字符串:09/09/2022. 也许您有一个函数接收此日期作为字符串,并且您想将月、日和年分配给单独的变量。
通常处理方式:

parseDateString(date: string) {
    let day = date.substr(0, 2);
    let month = date.substr(3, 2);
    let year = date.substr(6, 4);
    ...
}

利用析构或解构的力量,再加上regex的多功能性,我们可以做以下事情:

parseDateString(date: string) {
    const [,day,,month,,year] = date.match(
        /([0-9]{1,2})(\/)([0-9]{1,2})(\/)([0-9]{2,4})/
    );
    ...
}


我们有一个正则表达式,在不深入研究regex话题的情况下,与match()函数一起使用,将模式与给定的日期变量匹配。模式本身用圆括号分成五个捕获组,所以match()函数将在一个数组中分别返回这些部分。
在等式的左边,我们正在使用解构法将三个变量分配给从match()函数中收到的值。还请注意,我们通过在逗号之间使用空值来跳过返回数组的某些索引。从 match() 返回的第一个元素是匹配的字符串本身,所以我们可以跳过这一部分。
我们还跳过了索引2和4,因为我们不关心斜线。这就使得日、月、年成为独立的变量,对应于日期字符串的各个部分。
由于我们使用的是正则表达式,所以表达式本身可以按照你的要求进行修改,使其更加健壮。你可以修改表达式,以检查月名而不是数字,以及一周的天数,等等。
使用这种方法,你可以避免用一堆 "if "语句来检查边缘情况,只需让你的正则表达式更努力地工作。