gpt4 book ai didi

javascript - 正则表达式匹配以 "/"结尾的子组

转载 作者:行者123 更新时间:2023-12-02 06:14:55 27 4
gpt4 key购买 nike

我有两个 url,需要在域扩展后捕获一个字符串,如果它是两个字符的字符串并且以“/”结尾。到目前为止,我得到了这个:

var t1 = "http://www.test.net/shop/test-3";
var t2 = "http://www.test.net/gb/shop/test-2";

var rgx = /\.([a-z]{0,3})\/([a-z]{2}\/)?/;



console.log(rgx.exec(t1));

console.log(rgx.exec(t2));

吐出来

[".net/", "net", undefined]
[".net/gb/", "net", "gb/"]

这是正确的,只是我不想捕获“gb/”,而是捕获“gb”。有任何想法吗?我被困住了..

最佳答案

您可以使用的一种技术是在可选的非捕获组中使用捕获组:

/\.([a-z]{0,3})\/(?:([a-z]{2})\/)?/
^^^^ ^^

参见 regex demo

var t1 = "http://www.test.net/shop/test-3";
var t2 = "http://www.test.net/gb/shop/test-2";
console.log(/\.([a-z]+)\/(?:([a-z]{2})\/)?/.exec(t1));
console.log(/\.([a-z]+)\/(?:([a-z]{2})\/)?/.exec(t2));

谈到替代方法,这个正则表达式似乎更安全,因为它更精确:

/^https?:\/\/[^\/]+\.([a-z]+)\/(?:([a-z]{2})\/)?/

参见 this regex demo

详细信息:

  • ^ - 字符串的开始
  • https?:\/\/ - 协议(protocol)部分(http://https://)
  • [^\/]+\.([a-z]+)\/ - 域部分匹配除 / 之外的一个或多个字符。 然后将 TLD(1 个或多个字母,[a-z]+)捕获到第 1 组
  • (?:([a-z]{2})\/)? - 一个可选序列:
    • ([a-z]{2}) - 第 2 组捕获 2 个小写 ASCII 字母
    • \/ - 斜杠。

var t1 = "http://www.test.net/shop/test-3";
var t2 = "http://www.test.net/gb/shop/test-2";
console.log(/^https?:\/\/[^\/]+\.([a-z]+)\/(?:([a-z]{2})\/)?/.exec(t1));
console.log(/^https?:\/\/[^\/]+\.([a-z]+)\/(?:([a-z]{2})\/)?/.exec(t2));

关于javascript - 正则表达式匹配以 "/"结尾的子组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39609891/

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