的新手,请原谅这个愚蠢的问题。我有这个网址 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
玩得开心!:)
顺便一提。。。如果你是Web开发的新手,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}/, "")
*?
限定词的意思是"不要贪婪",所以.
不会跳过/
的。在否定字符类的情况下不需要它,因为[^/]
永远不会匹配/
。
这当然可以用"不太通用"的形式编写,因为真正的意图只是为了摆脱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, "")
// -> ""
祝您编码愉快!
注意:上述所有正则表达式都将提取第 3 /
之后的内容,如问题中所述。它们需要稍作修改,以在结果中包含第 3 /
。此外,不问 X-Y 问题也有帮助。
var str = 'http://www.blahblah.com/some/thing/blah'
var afterThirdSlash = str.split('/').slice(3).join('/')
split
返回一个数组,该数组是在每个/
字符上拆分的字符串。slice
从第四个元素(因为数组从零开始)开始选择数组的一部分,因为这对应于第三个斜杠之后的部分。join
通过重新插入/
将这些元素重新拼凑在一起。这是你想要的吗?
如果您知道URL以"http://www.blahblah.com/"开头,为什么不使用url.substring(24)?