【问题标题】:JavaScript regex to capture everything after the second to last backslashJavaScript 正则表达式捕获倒数第二个反斜杠之后的所有内容
【发布时间】:2017-06-24 02:21:59
【问题描述】:

我目前有一个如下所示的正则表达式:

/^.*[\\\/]/

这将从字符串中删除每个反斜杠。我面临的问题是我现在必须能够捕获从第二个到最后一个反斜杠的所有内容。

例子:

/Users/foo/a/b/c 将返回 b/c /Another/example/ 将返回 Another/Example

所以我需要在倒数第二个反斜杠之后捕获所有内容。上面的正则表达式将如何做到这一点?

【问题讨论】:

  • 如果您要捕获倒数第二个反斜杠周围的所有内容,您不想从第一个示例中获得a/b 吗?不是很清楚...
  • 您的网址/字符串是否始终使用斜杠?还是应该忽略它们?
  • @haxxxton 实际上可以忽略它们。
  • 我们可以假设/之间的字符是单词字符(即[a-zA-Z0-9_])是否还有其他字符需要适应(例如$-_.+!*'(),)?

标签: javascript regex


【解决方案1】:

试试这个简单的解决方案:

s = "aaaa/bbbb/cccc/dddd";
s.split("/").slice(-2).join("/"); /* It will return "cccc/dddd" */

【讨论】:

  • 我想你的意思是slice(-2)。作为slice(2),如果s = "aaaa/bbbb/cccc/dddd/eeee",这将返回太多项目,如果s = "aaaa/bbbb/cccc",则返回太少
  • 不错的答案,但您应该删除任何尾随斜杠!
  • 一个很好的例子,说明了为什么正则表达式有时会过大。说明 splitjoinslice 的力量。干得好。
【解决方案2】:

我假设您的意思是正斜杠,而不是反斜杠。

这是 pierlauro 答案的正则表达式替代品。

/([^\/]+\/[^\/]+)\/?$/

Regex101

【讨论】:

    【解决方案3】:

    正如 pierlauro 的回答所示,splitjoinslice 可能是最好的选择。但是,如果您必须使用正则表达式(不知道为什么),您可以使用以下内容:

    \/?(\[^\/\]+?\/\[^\/\]+)\/?$

    此正则表达式适用于可选的尾部斜杠和短于 2 /s 的 url。它利用$ 字符将我们的搜索范围集中在字符串的末尾。

    【讨论】:

      猜你喜欢
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 2016-10-20
      • 2012-06-01
      • 2019-01-10
      • 1970-01-01
      相关资源
      最近更新 更多