从url中查找并删除未知值

时间:2013-04-10 14:48:05

标签: javascript url

我写了一些js,它会对路径名进行一些清理。到目前为止,我有以下内容:

var corePageUrl = window.location.pathname.toLowerCase();
if (corePageUrl.indexOf("/account/logon")>=0||corePageUrl.indexOf("/account/summary")>=0)) {
  // do function here    
}

基本上,该函数需要执行以下操作:获取路径名,从中删除尾随/,如果除了那两个限定if语句的.indexOf语句之外还有其他内容,请将其删除。许多谷歌搜索都让我无处可去,当我开始处理更复杂的javascript问题时,这让我感到安心。

我不是要求任何人为我编码,更多的是帮助我找到能够带来理想结果的逻辑。

2 个答案:

答案 0 :(得分:2)

听起来你只想要一些基本的字符串操作。你的意思是这样的吗?

var url = window.location.pathname.toLowerCase(),
    i = -1, // var for indexOf
    lookFor = ['/account/logon', '/account/summary'], // what to look for
    j = lookFor.length; // var for loop
// remove query
i = url.indexOf('?');
if (i !== -1) { // has query
    url = url.slice(0, i); // trim
    i = -1; // reset i for later
}
// remove trailing /
while (url.slice(-1) === '/') { // has trailing /
    url = url.slice(0, -1); // trim it
}
// trim url in special cases 
while (i === -1 && j) { // find a match
    i = url.indexOf(lookFor[--j]); // remember to decrease loop counter
}
if (i !== -1) {
    i = i + lookFor[j].length; // position of end of match
    url = url.slice(0, i); // trim after it
}
url; // resulting url

// Alternately,
// remove query
url = url.split('?', 1)[0]; // get the segment before the first ? (all if no ?)
// remove trailing /
url = url.match(/^([\s\S]*?)\/*$/)[1]; // capture group excludes trailing "/"s
// etc

示例:

http://example.com/some/random///?thing=in_my_url
http://example.com/some/random

http://hilario.us/page/account/summary/place?stuff
http://hilario.us/page/account/summary

答案 1 :(得分:0)

如果我理解正确,您希望该功能可以执行以下操作:

输入http://www.example.com/account/logon/foo?bar=baz

输出http://www.example.com/account/logon

您可以使用正则表达式轻松完成此操作,并捕获您要匹配的网址部分。

var url = window.location.pathname.toLowerCase(),
    match;

if (match = url.match(/.*\/account\/(?:logon|summary)/)) {
    // do function here    
}

其中match包含的网址包括/account/logon/account/summary之前的所有内容。