【问题标题】:How would I get a specific portion of a regex expression?我将如何获得正则表达式的特定部分?
【发布时间】:2017-11-30 21:22:22
【问题描述】:

我正在尝试获取 URL 的域名。我可以运行一系列 if 语句来检查 url 包含的内容,但理想情况下我会使用正则表达式。

以下正则表达式 ^[^.]*:[\/]{0,2}[w]{0,3}[.]{0,1}[\w]*.[\w\W]*$ 可以满足我的要求。

这适用于: https://www.google.com http://www.google.com www.google.com

现在我只想从这个正则表达式中获取google.com,但不确定如何去做。

【问题讨论】:

  • 了解capturing groups
  • 确切的语法取决于您使用的语言,但您使用括号将所需的部分放在一个组中。 a(b)c 将匹配 abc 并返回 b 作为第一组的值。
  • @DomWeldon 它被标记为»javascript«,所以定义了语言……

标签: javascript regex parsing


【解决方案1】:

参考@PM 77-1的评论

RegExp.prototype.exec() (mdn-docs) 为您提供一个结果数组,其中每个索引对应于表达式中的»捕获组«:

var
  input = 'Hello',
  finder = /^(H)ell(o)/m,
  match = finder.exec(input);

console.log(match) // ["Hello", "H", "o"]

索引0是整个匹配,后面的每一项都是捕获组的结果,这些捕获组是由正则表达式中的(…)建立的,并且在表达式中从左到右排序。

【讨论】:

    【解决方案2】:

    如果我正确理解你的问题,

    试试这个^([^.]*:[\/]{0,2}[w]{0,3}[.]{0,1}){0,1}[\w]*.[\w\W]*$

    解释:

    我决定将查找协议的部分和 www 部分 [^.]*:[\/]{0,2}[w]{0,3}[.]{0,1} 组合在一起,并通过将其包裹在括号 (...) 中并将其组合在一起并为整个组添加 0 或 1 次子句来使其成为可选{0,1}

    【讨论】:

    • 你的正则表达式不起作用,它基本上接受任何东西,例如https:a123zsdca.sdkfj//google.com
    • ^([^.]*:[\/]{0,2}[w]{0,3}[.]{0,1}){0,1}[\w]*.[a-zA-Z]*$ 试试那个。但是,如果您想要进行 url 匹配,我可以立即看到一些缺陷。话虽如此,根据您的规范,这应该可行。
    • 这也不起作用。它实际上接受a112z。但无论如何,我的正则表达式对我的目的来说很好,我将使用捕获组。
    • 对,但这从来都不是你的规范的一部分。您提供的正则表达式可以匹配以http://www. 开头的任何内容,正如您在上面提到的http://www.a123zsdca.sdkfj//google.com。如果你找到了适合你的方法,那我很高兴。我不会假装知道你需要这个做什么,但就像我上面所说的,如果你的预期目的是 url 匹配,那么你提供的正则表达式中有很多漏洞。
    • 我指定正则表达式的目的是访问域名,例如google.com、facebook.com 等,去掉前缀和后缀,即 https://、http://。我不在乎域名之后的内容,因为在此期间之后的任何内容都会被清除。我只需要前缀才能正常工作,然后捕获通向第一个空格的所有内容,现在我可以做到这一点。不过感谢您的建议。
    猜你喜欢
    • 2016-12-27
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多