两个已知字符之间的子字符串

Substring between 2 known chars

本文关键字:之间 字符 字符串 两个      更新时间:2023-09-26

我正在寻找一种快速而廉价的方式从url中获取子字符串,如下所示:

https://docs.google.com/spreadsheets/d/1oZK-vdEf2rvBhvAmdrKt1xHNlCehVV-WHDShkZUUaBM/edit#gid=0

我后面的部分是:

1oZK-vdEf2rvBhvAmdrKt1xHNlCehVV-WHDShkZUUaBM

所以我们知道我们需要的是第4个'/'和第5个'/'之间的值(从零开始的索引)。

一个解决方案可能是这样的:

function getPosition(str, m, i) {
   return str.split(m, i).join(m).length;
}
var url = https://docs.google.com/spreadsheets/d/1oZK-vdEf2rvBhvAmdrKt1xHNlCehVV-WHDShkZUUaBM/edit#gid=0;
var firstOccurence = getPosition(url,'/',4);
var secondOccurence = getPosition(url,'/',5);
var result = url.substring(firstOccurence, secondOccurence);

有什么改进的建议吗?可以不调用getPosition() 2次吗?

您可以使用split方法从String:

var result = url.split('/');

它将返回一个数组,你可以通过索引访问你想要的部分:

result[4];

甚至:

result.slice(-2)[0];

使用字符串字面值可以将其缩短为:

url.split`/`[4]

希望有帮助

你可以使用regex:

var url = 'https://docs.google.com/spreadsheets/d/1oZK-vdEf2rvBhvAmdrKt1xHNlCehVV-WHDShkZUUaBM/edit#gid=0';
var result = url.match(/spreadsheets'/d'/([^'/]+)'/?/);
if(result){
	console.log(result[1])
}

var url = 'https://docs.google.com/spreadsheets/d/1oZK-vdEf2rvBhvAmdrKt1xHNlCehVV-WHDShkZUUaBM/edit#gid=0';
var part = url.replace('https://', '').split(/'//g)[3]
console.log(part)