对编程完全陌生,所以请原谅这个愚蠢的问题。我有这个网址http://www.blahblah.com/some/thing/blah ..
现在我需要出现在第三个“/”之后的字符串,即只是“/some/thing”。我不想从反向开始,因为每个页面的 URL 都不同,但协议和主机名是相同的..有没有办法我可以使用Javascript提取“/some/thing”..感谢任何帮助..谢谢!
对编程完全陌生,所以请原谅这个愚蠢的问题。我有这个网址http://www.blahblah.com/some/thing/blah ..
现在我需要出现在第三个“/”之后的字符串,即只是“/some/thing”。我不想从反向开始,因为每个页面的 URL 都不同,但协议和主机名是相同的..有没有办法我可以使用Javascript提取“/some/thing”..感谢任何帮助..谢谢!
var part = string.split('/')[2]
或者更复杂:
var string = "/a/b/c/d/e/d"
var arr1 = string.split('/')
var arr2 = []
for (i in arr1)
{
if (arr1[i].length > 0)
arr2.push(arr1[i])
}
var part = arr2[2]
使用 string.split 方法: http ://www.w3schools.com/jsref/jsref_split.asp
var str = "www.blah.com/blah/blah/thing/blah.php";
var arrayOfString = str.split("/");
alert(arrayOfString[2]); //coming back to do regex/substring for you
玩得开心!:)
顺便说一句...如果您是网络开发新手,www.w3schools.com 对我来说非常好 :)
因此,要响应您的编辑,您需要执行以下操作:
假设上面已经:
alert(arrayOfString.slice(3).join("/"));
好的修复它根据实际需要在这里.. 但就像我说的,检查http://www.w3schools.com它真的教会了我一些很好的基础知识。
要修复注释中的失败案例,请在拆分/切片/加入之前执行此操作:
if (str.substring(0,1) == "/"){ str = str.substring(1);}
我会在这里使用一个简单的正则表达式。
在第三个“/”之后获得东西的一种方法就是把它和它之前的所有东西一起扔掉。
基本思路:
"/a/b/c/d/e/f".replace(/.*?\/.*?\/s.*?\//, "")
// -> "c/d/e/f"
替代#1,以减少重复:
"/a/b/c/d/e/f".replace(/(?:.*?\/){3}/, "")
替代#2,如果输入可以包含换行符:
"/a/b/c/d/e/f".replace(/(?:[^\/]*\/){3}/, "")
限定符的*?
意思是“不要贪婪”,所以.
不会跳过/
's. 在负字符类案例中不需要它,因为[^\/]
永远不会匹配/
。
这当然可以写成“不太通用”的形式,因为真正的意图只是摆脱 URI 的协议/域部分(/
' 的数量只是观察到的关系):
"http://foo/a/b/c/d/e/f".replace(/https?:\/\/[^\/]*\/?/i, "")
// -> "a/b/c/d/e/f"
请注意,最后\/
一个?
后面有一个,因此它将为“http://foo”返回“”,并且如果出于某种奇怪的原因使用i
它,它将匹配(当然,完全可选)。HTTP://
"HTTPS://foo".replace(/https?:\/\/[^\/]*\/?/i, "")
// -> ""
快乐编码!
注意:上述所有正则表达式都将提取3rd之后/
的内容,如问题中所述。它们需要稍作修改以在结果中包含第 3 个/
。此外,不问 XY 问题也很有帮助。
如果您知道 url 以“http://www.blahblah.com/”开头,为什么不使用 url.substring(24)?
var str = 'http://www.blahblah.com/some/thing/blah'
var afterThirdSlash = str.split('/').slice(3).join('/')
split
返回一个数组,它是在每个字符上拆分的字符串/
。选择slice
从第四个元素开始的数组部分(因为数组是从零开始的),因为这对应于第三个斜杠之后的部分。通过join
重新插入/
. 这是你想要的吗?