Replace the last dash value from a data attribut? - javascript

var dataUrl = $('#AjaxMoreStatus').attr("data-url");
// http://localhost:8888/app/status/get/31/7
I need to change the last value of the link from the last dash (7) by another value.
7 is a dynamic value.
Ho can i do it ?
For instance if i want to change the dynamic value 7 by 9 :
var new = 9;
$("#AjaxMoreStatus").attr("data-url", url without the 7 + '/' + new);

use lastIndexOf to check the index of last occurrence of "/"
var dataUrl = $('#AjaxMoreStatus').attr("data-url");
var newValue = 9;
dataUrl = dataUrl.substring( 0, dataUrl.lastIndexOf( "/" ) ) + "/" + newValue;

Use split() to separate the pieces of the url and replace the last item:
var url = "http://localhost:8888/app/status/get/31/7";
url = url.replace("http://", "").split("/");
var newValue = "9";
url[(url.length - 1)] = newValue;
var newUrl = "http://"+url.join("/");

You can use replace method just like here
var url = "http://localhost:8888/app/status/get/31/7";
a.replace(/\/(\d*)$/, '/' + newValue);

If you only need to change the last 7 for other thing, try this code:
var dataUrl = 'http://localhost:8888/app/status/get/31/7';
var newValue = 9;
dataUrl = dataUrl.replace(/([0-9])$/i, newValue);
https://jsfiddle.net/8hf6ra8k/1/
Hope it may help you :).

You can use .lastIndexOf() to find the index. Then you can replace value at that index. For reference, refer following post: How do I replace a character at a particular index in JavaScript?.
var url = "htt[://stacloverflow.com/test/param/tobe/replaced/with/newValue";
var newVal = "testNewValue";
var lastIndex = url.lastIndexOf('/');
var result = url.substring(0,lastIndex+1) + newVal;
alert(result)

Related

Build key/value Object from slash-separated URL

Given a slash separated URL like http://www.example.com/some/fixed/path/param1/value1/param2/value2/param3/value3 how could I build a key/value Object with the dynamic parameters (param1/value, param2/value2...) of this URL?
Valid parameters always have this slash separated paramand value format and some/fixed/path would be a substring manually provided.
I tried to split the full URL (or whatever it could be) by the fixed substring and I managed to slice the dynamic params out of it as I wanted but I couldn't create the key/value Object as I needed:
var url = "http://www.example.com/some/fixed/path/param1/value1/param2/value2/param3/value3";
var uri = "some/fixed/path/";
var result = {};
url.split( uri ).forEach(function(x){
var arr = x.split('/');
arr[1] && (result[arr[0]] = arr[1]);
});
console.log( result );
But this piece of code only brings me the first pair instead of all of them and it requires the uri to obligatorily have a trailing slash. If the substring doesn't have it or has one to the left it acts all weird with a blank key and the first key as value o.O
I know it's simple, but I just can't do it. I tried to search but this must have a very specific way to refer to because I couldn't find by my own.
One last thing, if you don't mind explain instead of just give me the fish, I'd appreciate, so there won't have a next time... hopefully
You were only taking the second part after some/fixed/path/. You need to split this second part and iterates over the array. On each even index, I create a new property in the object with the name of the previous element
x is the current element
i is the current index
a is the array containing each element after splitting with /
var url = "http://www.example.com/some/fixed/path/param1/value1/param2/value2/param3/value3";
var uri = "some/fixed/path/";
var result = {};
var paramsToSplit = url.split(uri)[1];
paramsToSplit.split('/').forEach((x,i,a)=>{
if(i%2)
result[a[i-1]] = x;
});
console.log( result );
Try this:
var url = "http://www.example.com/some/fixed/path/param1/value1/param2/value2/param3/value3";
var uri = "some/fixed/path/";
var url = url.substring(url.indexOf(uri) + uri.length)
var options = url.split('/');
var results = [];
for(var i=0;i<options.length; i+=2){
results.push({[options[i]]:options[i+1]})
}
Are you looking for somethig like that?
var url = "http://www.example.com/some/fixed/path/param1/value1/param2/value2/param3/value3";
var uri = "some/fixed/path/";
var params = [];
var values = [];
var results = {};
url.split( uri )[1].split('/').forEach(function(e,i) {
if(i%2==0){
params.push(e)
} else {
values.push(e);
}
})
console.log( params, values );
params.forEach(function(e,i) {
results[e] = values[i];
});
console.log( results );
You may do as follows;
var text = "http://www.example.com/some/fixed/path/param1/value1/param2/value2/param3/value3";
result = text.split("/")
.slice(6)
.reduce((r,c,i,a) => i&1 ? Object.assign(r,{[a[i-1]]: c}) : r, {});
console.log(result);
You are quite close, you basically need to make another for loop for your produced arr and step every 2 values. Like so...
var url = "http://www.example.com/some/fixed/path/param1/value1/param2/value2/param3/value3";
var uri = "some/fixed/path/";
var result = {};
url.split( uri ).forEach(function(x){
var arr = x.split('/');
var step;
for (step = 0; step <= arr.length; step += 2) {
arr[step + 1] && (result[arr[step]] = arr[step + 1]);
}
});
console.log( result );

How to get the ID from this URL?

I need a way to get the ID ( 153752044713801 in this case ) of this page:
https://www.facebook.com/pages/%D8%A7%D9%84%D8%B4%D8%B1%D8%A7%D8%A8%D9%8A%D8%A9/153752044713801
I tried this code but doen't work:
var str = 0, pagefb = 0;
var fburl = 'https://www.facebook.com/pages/%D8%A7%D9%84%D8%B4%D8%B1%D8%A7%D8%A8%D9%8A%D8%A9/153752044713801';
var re1 = /^(.+)facebook\.com\/pages\/([-\w\.]+)\/([-\w\.]+)/;
if(re1.exec(fburl)){
str = re1.exec(fburl)[3];
pagefb = str.substr(str.lastIndexOf("-") + 1);
alert('ok');
}
try:
var fburl = 'https://www.facebook.com/pages/%D8%A7%D9%84%D8%B4%D8%B1%D8%A7%D8%A8%D9%8A%D8%A9/153752044713801';
var parts = fburl.split("/");
var myId = parts[parts.length-1];
alert(myId);
Try this regular expression: ^(.+)facebook\.com\/pages\/.*\/(\d*)
(in JavaScript, you have to add "/" at the beginning and end of the pattern like you did before)
this works for me
fburl.split('/')[fburl.split('/').length-1]
You can split the string using .split("/"). More information is availible on MDN
var fburl = 'https://www.facebook.com/pages/%D8%A7%D9%84%D8%B4%D8%B1%D8%A7%D8%A8%D9%8A%D8%A9/153752044713801';
var parts = fburl.split('/')
var myFacebookId = parts[parts.length - 1]
Basically it returns an array of the string split into multiple parts (at the character/s you put inside the brackets).
The parts[parts.length - 1] will get the last item in the array parts
Demo below (Don't worry about the document..., they just print out data):
var fburl = 'https://www.facebook.com/pages/%D8%A7%D9%84%D8%B4%D8%B1%D8%A7%D8%A8%D9%8A%D8%A9/153752044713‌​801/?ref=sfhsidufh';
var parts = fburl.split('/')
var myFacebookId = parts[parts.length - 1]
// If first digit is ?
if (myFacebookId[0] == '?') {
// Set myFacebookId to the second from last part
myFacebookId = parts[parts.length - 2]
}
document.write('MyFacebookId: ' + myFacebookId)

Can't get lastIndexOf to work

I have this code
var url = 'http://sitename.com/category/diving/',
catName = url.substr(url.lastIndexOf('/') + 1);
And when I try to run alert(catName) it returns empty string. What am I doing wrong?
You need the category name but you have to remove first the last /:
var url = 'http://sitename.com/category/diving/';
url = url.substr(0, url.length - 1);
catName = url.substr(url.lastIndexOf('/') + 1);
Result:
"diving"
because you add +1 to the index, so you get undefined string. remove the +1 in the lastIndexOf
You can use..parseUri
var url = 'http://sitename.com/category/diving/';
url = url.substr(0, url.length - 1);
var filename1 = parseUri(url ).file;--way1
var filename2 = url.match(/.*\/(.*)$/)[1];
Result="diving";
Ways to achieve this

String to array then remove last element

I have the strings below and I am trying to remove the last directory from them but I cant seem to get the grasp of it.
JavaScript
var x = path.split("/")
alert(path +' = ' +x.slice(0, -1));
Expected Result
/foo/bar/ = /foo/
/bar/foo/ = /bar/
/bar/foo/moo/ = /bar/foo/
Try:
let path = "/bar/foo/moo/";
let split = path.split("/");
let splicedStr = split.slice(0, split.length - 2).join("/") + "/";
console.log(splicedStr);
Try:
var sourcePath="/abc/def/ghi";
var lastIndex=sourcePath.lastIndexOf("/");
var requiredPath=sourcePath.slice(0,lastIndex+1);
Output: /abc/def/

Search and replace specific query string parameter value in javascript

I have a string which is something like this :
a_href= "www.google.com/test_ref=abc";
I need to search for test_ref=abc in thisabove strinng and replace it with new value
var updated_test_ref = "xyz";
a_href ="www.google.com/test_ref=updated_test_ref"
i.e
www.google.com/test_ref=xyz.
How can we do this ?
EDIT:
test_ref value can be a URL link in itself something like http://google.com?param1=test1&param2=test2. I need to capture complete value not till first &.
a_href = a_href.replace(/(test_ref=)[^\&]+/, '$1' + updated_test_ref);
Based on this discussion I have fixed the Chris function (problem with regex string!)
function updateUrlParameter(url, param, value){
var regex = new RegExp('('+param+'=)[^\&]+');
return url.replace( regex , '$1' + value);
}
Based on this discussion I have created a references function. enjoy
updateUrlParameter(url, param, value){
var regex = new RegExp("/([?|&]" + param + "=)[^\&]+/");
return url.replace(regex, '$1' + value);
}
I was searching for this solution for few hours and finally stumbled upon this question. I have tried all the solutions here. But there is still an issue while replacing specific param value in url.
Lets take a sample url like
http://google.com?param1=test1&param2=test2&anotherparam1=test3
and the updated url should be like
http://google.com?param1=newtest&param2=test2&anotherparam1=test3, where value of param1 is changed.
In this case, as #Panthro has pointed out, adding [?|&] before the querying string ensures that anotherparam1 is not replaced. But this solution also adds the '?' or '&' character to the matching string. So while replacing the matched characters, the '?' or '&' will also get replaced. You will not know exactly which character is replaced so you cannot append that character as well.
The solution is to match '?' or '&' as preceding characters only.
I have re-written the function of #Chris, fixing the issue with string and have added case insensitive argument.
updateUrlParameter(url, param, value){
var regex = new RegExp('(?<=[?|&])(' + param + '=)[^\&]+', 'i');
// return url.replace(regex, param + '=$1' + value);
return url.replace(regex, param + '=' + value);
}
Here (?<=[?|&]) means, the regex will match '?' or '&' char and will take the string that occurs after the specified character (looks behind the character). That means only param1=test1 substring will be matched and replaced.
I know this is a bit dirty code but I've achieved what I was looking for. It replaces the given query string or adds new one if it doesn't exist yet.
function updateUrlParameter(url, param, value) {
var index = url.indexOf("?");
if (index > 0) {
var u = url.substring(index + 1).split("&");
var params = new Array(u.length);
var p;
var found = false;
for (var i = 0; i < u.length; i++) {
params[i] = u[i].split("=");
if (params[i][0] === param) {
params[i][1] = value;
found = true;
}
}
if (!found) {
params.push(new Array(2));
params[params.length - 1][0] = param;
params[params.length - 1][1] = value;
}
var res = url.substring(0, index + 1) + params[0][0] + "=" + params[0][1];
for (var i = 1; i < params.length; i++) {
res += "&" + params[i][0] + "=" + params[i][1];
}
return res;
} else {
return url + "?" + param + "=" + value;
}
}
It will work when given regular URL addresses like:
updateUrlParameter('https://www.example.com/some.aspx?mid=1&id=2','id','5');
updateUrlParameter('https://www.example.com/?mid=1&id=2','id','5');
updateUrlParameter('https://www.example.com/some.aspx','id','5');
Please note It will NOT work only if any of the query string parameter name or value contains "=" and/or "&" chars. It will work just fine behind that.
*Java script code to find a specific query string and replace its value *
('input.letter').click(function () {
//0- prepare values
var qsTargeted = 'letter=' + this.value; //"letter=A";
var windowUrl = '';
var qskey = qsTargeted.split('=')[0];
var qsvalue = qsTargeted.split('=')[1];
//1- get row url
var originalURL = window.location.href;
//2- get query string part, and url
if (originalURL.split('?').length > 1) //qs is exists
{
windowUrl = originalURL.split('?')[0];
var qs = originalURL.split('?')[1];
//3- get list of query strings
var qsArray = qs.split('&');
var flag = false;
//4- try to find query string key
for (var i = 0; i < qsArray.length; i++) {
if (qsArray[i].split('=').length > 0) {
if (qskey == qsArray[i].split('=')[0]) {
//exists key
qsArray[i] = qskey + '=' + qsvalue;
flag = true;
break;
}
}
}
if (!flag)// //5- if exists modify,else add
{
qsArray.push(qsTargeted);
}
var finalQs = qsArray.join('&');
//6- prepare final url
window.location = windowUrl + '?' + finalQs;
}
else {
//6- prepare final url
//add query string
window.location = originalURL + '?' + qsTargeted;
}
})
});

Categories

Resources