gpt4 book ai didi

javascript - 更改 .match() 中的捕获组顺序

转载 作者:行者123 更新时间:2023-12-02 17:01:21 25 4
gpt4 key购买 nike

在 JS 中,如果我有一个像这样的正则表达式:

new RegExp('^(.*?) 中的年份 ([0-9]{1,4})$|^([0-9]{1,4}) 是年份$ ')

那么如何确保“年份”部分始终是相同的捕获组,以便我可以像 matches[2] 一样访问它?目前,如果 RegExp 的第一部分匹配,则年份为 matches[2],但在第二部分中,年份为 matches[1]。我想让它们相同,这样我就可以一致地检索相同的值。

另请记住,我仍然想在开头捕获 (.*?),因此简单地删除那里的括号对我没有帮助。

最佳答案

年份永远不会出现在 matches[1] 中。捕获组编号是根据整个正则表达式分配的,而不是根据替代匹配来分配的。如果其中一个替代项不匹配,则其所有捕获组都将为空。

因此,如果第一个替代项匹配,则年份将位于 matches[2] 中。如果第二个选项匹配,它将位于 matches[3] 中。然后,您可以从匹配的年份中获取年份:

var year = matches[2] || matches[3];

顺便说一句,当正则表达式是文字字符串时,无需使用new RegExp。使用正则表达式文字

/^(.*?) in the year ([0-9]{1,4})$|^([0-9]{1,4}) is the year$/

关于javascript - 更改 .match() 中的捕获组顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25677276/

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