如何从第三个“/”后获取字符串

时间:2012-06-15 01:32:32

标签: javascript

对编程完全陌生,请原谅这个愚蠢的问题。 我有这个网址http://www.blahblah.com/some/thing/blah ..

现在我需要在第三个“/”之后出现的字符串ie。,只是“/ some / thing”.. 我不想反过来,因为每个页面的URL不同,但协议和主机名是相同的.. 有没有办法可以使用Javascript提取“/ some / thing”.. 感谢任何帮助.. 谢谢!

5 个答案:

答案 0 :(得分:3)

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]

答案 1 :(得分: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对我来说非常好:) :( / p>

所以要回复你的编辑,你需要做这样的事情:

上面假设:

alert(arrayOfString.slice(3).join("/"));

确定根据实际需要在这里修复..但就像我说的,看看http://www.w3schools.com它真的教会了我一些很好的基础知识。

修复注释中的失败案例,在split / slice / join之前执行此操作:

if (str.substring(0,1) == "/"){ str = str.substring(1);}

答案 2 :(得分: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的协议/域部分({{1}的数量}只是观察到的关系):

/

请注意,最后一个"http://foo/a/b/c/d/e/f".replace(/https?:\/\/[^\/]*\/?/i, "") // -> "a/b/c/d/e/f" 后面有一个\/,所以它会为“http:// foo”返回“”,?就会匹配{{1}如果用于某种奇怪的原因(当然是完全可选的)。

i

快乐的编码!


注意:正如问题中所述,所有上述正则表达式将在第3 HTTP://之后提取内容。它们需要稍微修改为包含结果中的第3个"HTTPS://foo".replace(/https?:\/\/[^\/]*\/?/i, "") // -> "" 。此外,它不会问X-Y问题。

答案 3 :(得分:0)

var str = 'http://www.blahblah.com/some/thing/blah'
var afterThirdSlash = str.split('/').slice(3).join('/')

split返回一个数组,该数组是每个/个字符上的字符串。 slice从第四个元素中选择数组的一部分(因为数组从零开始),因为它对应于第三个斜杠之后的部分。 join通过重新插入/将这些元素重新组合在一起。这是你想要的吗?

答案 4 :(得分:0)

如果您知道网址以'http://www.blahblah.com/'开头,为什么不使用 url.substring(24)