【问题标题】:RegEx to get section of URL after string in Javascript正则表达式在 Javascript 中获取字符串后的 URL 部分
【发布时间】:2017-03-29 16:26:21
【问题描述】:

我有以下网址:

http://data.test.com/api/v1/entity/1231

我需要获取v1/ 之后和/ 之前的文本(在斜线之间),在本例中是单词entity。我正在使用以下正则表达式,但我得到的是第 1 组的entity/1231

/^[^\#\?]+\/v1\/([^\?]+).*$/

知道如何摆脱1231entity 之后的任何内容吗?

【问题讨论】:

  • v1\/([^/]+)v1\/(.*?)\/
  • 如果零件固定"http://data.test.com/api/v1/entity/1231".split("/")[5]
  • 如果您正在使用的 URL 是可预测的,那么正则表达式虽然可能,但可能是一个过于复杂的工具。网址可以更改吗?是否总是“v1/之后和[下一个]/之前”?
  • @DavidThomas 是的,它们是可以预测的
  • 你需要str.match(/\/v1\/([^\/]+)/)[1]

标签: javascript regex


【解决方案1】:

您可以使用new RegExp("/v1/([^/]+)"将您需要的值捕获到捕获组中

var str = "http://data.test.com/api/v1/entity/1231";
var res = str.match(new RegExp("/v1/([^/]+)"));
if (res) 
    console.log(res[1]);

/v1/([^/]+) 匹配:

  • /v1/ - 文字字符串 /v1/
  • ([^/]+) - 捕获组 1 匹配除 / 之外的一个或多个字符。

由于 RegExp 定义中的构造函数表示法,无需在正则表达式模式中转义正斜杠。

另外,由于 ECMAScript 2018 在 JavaScript RegExp 模式中启用了lookbehind 使用,您还可以使用lookbehind-based 方法 直接获取整体所需的值匹配:

const str = "http://data.test.com/api/v1/entity/1231";
const res = str.match(/(?<=\/v1\/)[^\/]+/);
if (res) {
    console.log(res[0]);
}

详情

  • (?&lt;=\/v1\/) - 一个正向的后视,匹配紧接在 /v1/ 文本之前的位置
  • [^\/]+ - 除了/ 字符之外的一个或多个字符。

【讨论】:

    【解决方案2】:

    试试这个:

    ^[^\#\?]+\/v1\/([^\?]+).*(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/1231)$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-10
      • 2021-09-27
      • 2014-09-04
      • 2014-10-18
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多