繁体   English   中英

正则表达式在第三个斜杠之后但在减号之前获取第一个单词

[英]Regex to get first word after third slash but before minus symbol

这是我必须处理的 URL 之一...

https://www.some-domain.de/city/123/street-firstname-lastname

我需要使用 JS上街 域保持不变,城市保持不变,但数字123可能会有所不同。

到目前为止,我设法获得了一些其他价值,但完全不知道如何获得街道。 任何帮助表示赞赏。

我建议使用一些现有的库(像这样? )来解析 url 并隔离路径 然后在'/'上拆分以获取路径段(或者您使用的 url-parser 可能会有一个选项)。 一旦你有了你想要的单个路径段,你可以在'-'上拆分,或者使用正则表达式,无论哪个。

这样做的好处不仅在于您不必自己编写大型复杂的正则表达式,它还将释放您对输入数据的许多假设并提供更可靠的解决方案。

var citynumber = document.location.href.split('/')[4];

var address = document.location.href.split('/')[5];
var street= address.split('-')[0]

在@ShapeOfMatter 的帮助下找到它。 我刚刚选择了最后一个斜线之后的所有内容,这次使用“-”而不是“/”将其拆分,然后选择了第一个单词。 非常感谢。

以下正则表达式验证 url 模式并捕获街道名称...

/^https*:\/\/(?:[^\/]+\/){3}([^-]+)/

它读...

  • ^https*:\/\/ ... 从头开始匹配协议http://https://
  • (?:[^\/]+\/){3} ...匹配以下模式...
    • [^\/]+\/ ... 任何不是斜杠的字符序列,后跟斜杠。
    • 不要捕获这个组... (?: ... )
    • 但该模式必须准确重复 3 次... {3}
  • ([^-]+) ... 捕获任何不是减号/破折号的字符序列,即街道名称

 const regXCaptureStreet = (/^https*:\/\/(?:[^\/]+\/){3}([^-]+)/gm); const sampleText = `https://some-domain.de/city/123/street-firstname-lastname //foo/bar/baz/biz/ http://example.org/the-city/987654/mystreetname-myfirstname-mylastname //foo/bar/baz/biz/ https://some-domain.de/city/123/streetname-firstname-lastname //foo/bar/baz/biz/ http://example.org/the-city/987654/nameofstreet-myfirstname-mylastname`; console.log( [...sampleText.matchAll(regXCaptureStreet)].map(result => result[1]) )
 .as-console-wrapper { min-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM