我有以下网址:
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吗?
您可以使用以下命令将所需的值捕获到捕获组中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/- 与紧接在文本前面的位置相匹配的正向后查找[^\/]+- 除一个/字符外的一个或多个字符。