简体   繁体   中英

Using Javascript to remove end of URL

Using window.location.pathname I get "/Mobile/Evol/12-20-2011".

Using Javascript, how could I drop off everything after "Evol/" so that I get "/Mobile/Evol/"?

You can use a combination of the substring() and lastIndexOf() functions to easily cut off everything after the last / :

uri    = "/Mobile/Evol/12-20-2011";
newUri = uri.substring(0, uri.lastIndexOf('/'));

as @josh points out if there are more directories after "/Evol", this fails. You can fix this by searching for the string 'Evol/' then adding its length back to the substring end:

dir = "Evol/";
newUri = uri.substring(0, uri.lastIndexOf(dir) + dir.length);

Chrome console gives me this output:

> uri    = "/Mobile/Evol/12-20-2011";
"/Mobile/Evol/12-20-2011"

> dir = "Evol/";
  newUri = uri.substring(0, uri.lastIndexOf(dir) + dir.length);
"/Mobile/Evol/"

Just use "split" function in JavaScript string,

var url = '/Mobile/Evol/12-20-2011';
var tokens = url.split('/');
var reqURL = token[0] + '/'+ token[1] ;

Of course the URL format must be the same some_string/some_string/some_string

var str = window.location.pathname;
const sub = "Evol/";

var locEvol = str.indexOf(sub);
var endIdx = locEvol + sub.length;
var beginStr = str.substring(0, endIdx);
// beginStr contains the desired substring

Assuming you want to cut off any query and fragment completely:

url.replace(/\/Evol\/[^?#]*(?:[?#].*)?$/, '/Evol')

To break this regex down:

  1. \\/Evol\\/ matches the literal text "/Evol/" . The \\ 's are necessary since //Evol/... would be a line comment, and a / elsewhere in a regex ends the regex.
  2. [^?#] matches anything except a query or fragment delimiter
  3. (?:...)? just makes something optional
  4. [?#].* matches a query or fragment start followed by any number of non-whitespace chars
  5. $ forces the match to reach the end of the input.

One Liner:

match.url.split("/").slice(0,-1).join("/")

 let array1 = "/first/second/third/fourth"; let array2="posts/stories/1234"; console.log("Result=",array1.split("/").slice(0,-1).join("/")); console.log("Result=",array2.split("/").slice(0,-1).join("/"));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM