gpt4 book ai didi

Javascript 正则表达式,确定匹配哪个组

转载 作者:行者123 更新时间:2023-12-02 18:50:19 25 4
gpt4 key购买 nike

我在 javascript 中有以下正则表达式用于匹配类似于 book[n], book[1,2,3,4,5,...,n]book[author="Kristian"]book[id=n](n 是任意数字):

var opRegex = /\[[0-9]+\]|\[[0-9]+,.*\]|\[[a-zA-Z]+="*.+"*\]/gi;

我可以通过以下方式使用它:

// If there is no match in any of the groups hasOp will be null
hasOp = opRegex.exec('books[0]');

/*
Result: ["[0]", index: 5, input: "books[0]"]
*/

如上所示,我不仅获得了值,还获得了 [ 和 ]。我可以通过使用组来避免这种情况。所以我将正则表达式更改为:

var opRegex = /\[([0-9]+)\]|\[([0-9]+,.*)\]|\[([a-zA-Z]+=".+")\]/gi;

运行与上面相同的结果将是:

["[0]", "0", undefined, undefined, index: 5, input: "books[0]"]

上面我得到了数组中索引 1、2 和 3 的组。对于此示例,匹配项位于第一个正则表达式组中,但如果匹配项位于第二个正则表达式组中,则匹配项将位于索引 2 或数组中。

我可以更改我的第一个正则表达式来获取不带括号的值,还是使用分组方法和 while 循环来获取第一个定义的值?

我还缺少什么吗?是不是很贪心?

如果您需要更多信息,请告诉我,我很乐意提供。

最佳答案

我有一些建议。首先,特别是当您正在寻找文字括号时,请尽可能避免使用正则表达式括号(例如,将 [0-9] 替换为 \d)。另外,您允许使用 * 进行多个引号,因此我将其更改为 "?。但最重要的是,我将括号的匹配移到了交替之外,因为它们应该出现在每场替代比赛中。这样,无论哪个部分匹配,您都会拥有相同的组。

/\[(\d+(,\d+)*|[a-zA-Z]+="?[^\]]+"?)\]/gi

关于Javascript 正则表达式,确定匹配哪个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15910068/

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