0

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

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

基本上,该函数需要执行以下操作:获取路径名,从中删除尾随的 /,如果这两个.indexOf语句之外还有任何内容符合 if 语句,则将其删除。无数的谷歌搜索让我无处可去,当我开始处理更复杂的 javascript 问题时,这让我无法理解。

我没有要求任何人为我编写此代码,因此请帮助我了解导致我达到预期结果的逻辑。

4

2 回答 2

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
于 2013-04-10T15:01:15.813 回答
0

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

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

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

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

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

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

Wherematch将包含 URL,包括直到/account/logonor的所有内容/account/summary

于 2013-04-10T15:33:55.583 回答