gpt4 book ai didi

javascript - 如何让我的正则表达式只返回我的比赛?

转载 作者:行者123 更新时间:2023-11-29 21:55:13 26 4
gpt4 key购买 nike

我这样做:

var regex = /^.*brainshark.*\/(?:vu\?pi=(.*)|.*-(\d*))/;

string.match(regex).exec()

假设字符串完全匹配正则表达式,我得到一个包含三个的数组。第一个元素包含整个字符串。第二个元素可能包含也可能不包含匹配项,我的第三个元素可能包含也可能不包含匹配项。

假设我的字符串是“http://my.brainshark.com/Public-Speaking-For-Executives-409829042” 我的比赛将在索引 2 上。

如果字符串是“http://www.brainshark.com/cvi/vu?pi=zF0z1327H2zC5iGz0”,那么匹配将在索引 1 上

我怎样才能让我的匹配项始终在元素 1 中,或者可能,我只是在没有任何数组的情况下取回我的匹配项?

最佳答案

简短的版本:在 JavaScript 中……你不能。

但让我们先弄清楚一些术语:数组中的第一项是您的实际匹配项。你得到了整个字符串,因为你的模式恰好匹配了整个字符串。然后,您为每个捕获的组(您的模式中的括号)获得一个项目。

不幸的是,JavaScript 对正则表达式的支持非常有限。其他口味会让您轻松获得想要的东西。例如:

  • Perl/PCRE 支持 branch reset group : (?|vu\?pi=(.*)|.*-(\d*)) - 此模式将返回单个捕获组。
  • .NET 支持重复命名组:(?:vu\?pi=(?<id>.*)|.*-(?<id>\d*)) - 此模式将在 id 中返回单个值组。

但是在 JS 中你基本上必须自己提取你的值(value)。一个简单的解决方案是:

var match = /your regex/.exec(yourString);
var value = match && (match[1] || match[2]);

作为旁注,我会像这样重写您的模式:

/^(?:https?:\/\/)?[^\/]*?brainshark.*\/(?:vu\b.*?[?&]pi=([^&]*)|.*-(\d*))/i

我用了[^&]*[?&]当您遇到带有更多查询参数的 URL 时。开头的变化是确保brainshark字符串在主机名中。哦,我还添加了不区分大小写。

关于javascript - 如何让我的正则表达式只返回我的比赛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807319/

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