RegEx 在 Javascript 中获取字符串后的 URL 部分

ari*_*lcr 2 javascript regex

我有以下网址:

http://data.test.com/api/v1/entity/1231
Run Code Online (Sandbox Code Playgroud)

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

/^[^\#\?]+\/v1\/([^\?]+).*$/
Run Code Online (Sandbox Code Playgroud)

关于如何摆脱1231或之后发生的任何事情有什么想法entity吗?

Wik*_*żew 6

您可以使用以下命令将所需的值捕获到捕获组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]);
Run Code Online (Sandbox Code Playgroud)

比赛/v1/([^/]+)

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

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

或者,由于 ECMAScript 2018 在 JavaScript RegExp模式中启用了后向使用,您还可以使用基于后向的方法来直接获取整个匹配所需的值:

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

细节

  • (?<=\/v1\/)/v1/- 与紧接在文本前面的位置相匹配的正向后查找
  • [^\/]+- 除一个/字符外的一个或多个字符。