gpt4 book ai didi

javascript - 如何在 nodejs 中用单个正则表达式匹配多个字符串?

转载 作者:行者123 更新时间:2023-11-30 20:55:03 26 4
gpt4 key购买 nike

我的问题

我对以下代码片段感到困惑。这些字符串在正则表达式方面似乎相同(唯一的区别是应该与 \d 匹配的数字。本质上,第一个字符串匹配而第二个字符串不匹配。

在尝试之后,很明显顺序很重要:只有第一个字符串被匹配。

const regex = /departure\stime\s+([\d:]+)[\s\S]*arrival\stime\s+([\d:]+)[\s\S]*Platform\s+(\S+)[\s\S]*Duration\s([\d:]+)/gm;
const s1 = '\n departure time 05:42\n \n arrival time 06:39\n Boarding the train from Platform 3\n \n Switch train in \n No changing\n \n Change\n \n \n \n \n Access for handicapped.\n reserved seats\n \n \n Duration 00:57\n \n ';
const s2 = '\n departure time 05:12\n \n arrival time 06:09\n Boarding the train from Platform 3\n \n Switch train in \n No changing\n \n Change\n \n \n \n \n Access for handicapped.\n reserved seats\n \n \n Duration 00:57\n \n ';
console.log('Match: ', regex.exec(s1));
console.log('No Match:', regex.exec(s2));

我的问题

如何使用相同的正则表达式来匹配多个字符串,而不用担心之前的匹配可能会改变匹配?

最佳答案

当您在正则表达式中使用“g”标志时,.exec() 将返回正则表达式对象上 lastIndex 属性的索引。然后,当您尝试对同一正则表达式再次使用 .exec() 时,它将在 lastIndex 中指定的索引处开始搜索。

有几种方法可以克服这个问题:

1) Remove the 'g' flag. lastIndex will stay set at 0
2) Use .match(), .test(), or .search()
3) Manually reset the lastIndext after each call to .exec()
// for example:
let results = regex.exec(s1);
regex.lastIndex = 0;

在此处查看文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

关于javascript - 如何在 nodejs 中用单个正则表达式匹配多个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47756343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com