【问题标题】:JS Regexp to exclude forward slash after .com in urlJS Regexp 在 url 中排除 .com 之后的正斜杠
【发布时间】:2020-05-13 16:45:27
【问题描述】:

我有这个 URL,例如 https://www.example.com/filters/test.jpg,在 JS 中,我想检索这部分:filters/test.jpg

我使用的是match(),但匹配的第一个位置的元素是/filters/test.jpg

这是我的正则表达式:/(?!com)\/((\w+)\/(.*))/

从匹配数组中删除正斜杠/ 缺少什么?

【问题讨论】:

  • new URL('https://www.example.com/filters/test.jpg').pathname.substr(1)
  • 您的目标是获得描述的结果还是了解正则表达式是什么?
  • 任何体面的答案都应该解释负面的前瞻性并没有像 OP 认为的那样做。环顾四周是零宽度,所以(?!com)\/ 没有意义 - 当您已经将正斜杠作为第一个字符时,“com”怎么会出现在前面的三个字符中。
  • @MikeM 我修改了您的反馈意见,我认为这是一个很好的观点。

标签: javascript regex


【解决方案1】:

如果您对正则表达式本身感兴趣而不仅仅是结果,那么这个表达式怎么样?

(?<=.+\.com\/).+

这使用了积极的后视,并会在任何数量的以“.com/”结尾的文本之后为您提供所有内容。请注意我在句号和正斜杠中使用了转义斜杠。如果您想要更具体,您可以对原始正则表达式中的单词组和第二个斜杠执行相同的操作:

(?<=.com\/)((\w+)\/(.*))

更新:根据要求,关于负向与正向前瞻/后视的注释:前瞻指示查询“查找 X,但仅在后跟 Y 时才匹配”。负前瞻“查找 X,但仅在未跟随 Y 时才匹配”。在您的情况下,您需要向后看,因为这将“查找 X,但只有在 Y 前面时才匹配”。您正在尝试的否定后视允许仅在模式之前没有任何内容时才匹配模式,因此在您的情况下这样做将是一个错误。更多信息请见https://javascript.info/regexp-lookahead-lookbehind

如果您的目标只是获得结果,我认为在 javascript 中使用 URL 对象(如评论中所示)实际上比正则表达式更好,因为它更适合特定问题。见https://dev.to/attacomsian/introduction-to-javascript-url-object-27hn

【讨论】:

    【解决方案2】:

    如果代码为新的 JS 引擎/(?&lt;=\/)(\w+)\/.*/

    如果旧 JS 引擎的代码/\b(?!(?:com|net|org|uk)\/)(\w+)\/.*/

    最好的方法是使用 /\/((\w+)\/.*)/ 存储数组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 2013-04-10
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      相关资源
      最近更新 更多