दिलचस्प पोस्ट
ACTION_IMAGE_CAPTURE के साथ ली गई छवियां हमेशा ExifInterface के लिए 1 देता है। TAG_ORIENTATION कुछ नए उपकरणों पर वस्तु खाली है? पायथन के साथ विकिपीडिया लेख प्राप्त करें माओरिक्स के साथ अपने मैक पर पीजी मणि स्थापित करने के लिए असंभव HTML <textarea> के लिए डिफ़ॉल्ट मान कैसे जोड़ें? मूल वाक्य रचना के लिए वैकल्पिक हल को पार्स नहीं किया जा रहा है विशिष्ट सीएसएस नियमों को केवल क्रोम में कैसे लागू किया जाए? MySQL> तालिका मौजूद नहीं है लेकिन यह (या यह चाहिए) जावास्क्रिप्ट ऑब्जेक्ट को जेसन स्ट्रिंग के लिए एन्कोडिंग करना PHP एक सरणी को दूसरे में संलग्न करें (सरणी_पश या +) jquery contenteditable div में कर्सर स्थिति निर्धारित करना सख्त मोड में किसी अज्ञात वातावरण में वैश्विक ऑब्जेक्ट का संदर्भ प्राप्त करना उदाहरण: एंड्रॉइड बाय-डायरेक्शनल नेटवर्क सॉकेट एसिंक टास्क का उपयोग करते हुए लाइन-लपेटें ढूँढना जब रूट एल कैपिटन (रूटलेस अक्षम) पर ऑपरेशन की अनुमति नहीं है

मैं जावास्क्रिप्ट में एक क्वेरी स्ट्रिंग पैरामीटर कैसे हटा सकता हूं?

नियमित अभिव्यक्ति का उपयोग करते हुए एक मानक स्ट्रिंग में एक यूआरएल स्ट्रिंग में क्वेरी स्ट्रिंग से पैरामीटर को हटाने का बेहतर तरीका है?

मेरे परीक्षण में काम करने वाली अभी तक जो कुछ भी आया है, वह यहाँ है, लेकिन मैं क्वेरी स्ट्रिंग पार्सिंग को फिर से बनाना पसंद नहीं करता!

function RemoveParameterFromUrl( url, parameter ) { if( typeof parameter == "undefined" || parameter == null || parameter == "" ) throw new Error( "parameter is required" ); url = url.replace( new RegExp( "\\b" + parameter + "=[^&;]+[&;]?", "gi" ), "" ); "$1" ); // remove any leftover crud url = url.replace( /[&;]$/, "" ); return url; } 

वेब के समाधान से एकत्रित समाधान "मैं जावास्क्रिप्ट में एक क्वेरी स्ट्रिंग पैरामीटर कैसे हटा सकता हूं?"

 "[&;]?" + parameter + "=[^&;]+" 

खतरनाक लगता है क्योंकि यह पैरामीटर 'बार' मैच होगा:

 ?a=b&foobar=c 

इसके अलावा यह असफल हो सकता है यदि parameter में कोई भी वर्ण है जो कि RegExp में विशेष है, जैसे '।' और यह एक वैश्विक regex नहीं है, इसलिए यह केवल पैरामीटर का एक उदाहरण निकाल देगा।

मैं इसके लिए एक साधारण RegExp का उपयोग नहीं करेगा, मैं पैरामीटर को पार्स करूँगा और जिन लोगों को आप नहीं चाहते उन्हें खो देंगे।

 function removeURLParameter(url, parameter) { //prefer to use l.search if you have a location/link object var urlparts= url.split('?'); if (urlparts.length>=2) { var prefix= encodeURIComponent(parameter)+'='; var pars= urlparts[1].split(/[&;]/g); //reverse iteration as may be destructive for (var i= pars.length; i-- > 0;) { //idiom for string.startsWith if (pars[i].lastIndexOf(prefix, 0) !== -1) { pars.splice(i, 1); } } url= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : ""); return url; } else { return url; } } 

Bobince उत्तर से कॉपी किया गया, लेकिन क्वेरी स्ट्रिंग में प्रश्न चिह्नों का समर्थन किया, उदा

http://www.google.com/search?q=test???+something&aq=f

क्या यह यूआरएल में एक से अधिक प्रश्न चिह्नों के लिए मान्य है?

 function removeUrlParameter(url, parameter) { var urlParts = url.split('?'); if (urlParts.length >= 2) { // Get first part, and remove from array var urlBase = urlParts.shift(); // Join it back up var queryString = urlParts.join('?'); var prefix = encodeURIComponent(parameter) + '='; var parts = queryString.split(/[&;]/g); // Reverse iteration as may be destructive for (var i = parts.length; i-- > 0; ) { // Idiom for string.startsWith if (parts[i].lastIndexOf(prefix, 0) !== -1) { parts.splice(i, 1); } } url = urlBase + '?' + parts.join('&'); } return url; } 

किसी भी एक regex समाधान में दिलचस्पी है मैं इस समारोह को जोड़ने / हटाने / एक querystring पैरामीटर को अद्यतन करने के लिए डाल दिया है। कोई मूल्य नहीं प्रदान करने से पैरामीटर को हटा दिया जाएगा, जो आपूर्ति करेगा वह पैरामीटर को जोड़ देगा / अपडेट करेगा। यदि कोई यूआरएल नहीं दिया गया है, यह खिड़की से हो जाएगा। स्थान। यह समाधान भी यूआरएल के एंकर को ध्यान में रखता है।

 function UpdateQueryString(key, value, url) { if (!url) url = window.location.href; var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"), hash; if (re.test(url)) { if (typeof value !== 'undefined' && value !== null) return url.replace(re, '$1' + key + "=" + value + '$2$3'); else { hash = url.split('#'); url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, ''); if (typeof hash[1] !== 'undefined' && hash[1] !== null) url += '#' + hash[1]; return url; } } else { if (typeof value !== 'undefined' && value !== null) { var separator = url.indexOf('?') !== -1 ? '&' : '?'; hash = url.split('#'); url = hash[0] + separator + key + '=' + value; if (typeof hash[1] !== 'undefined' && hash[1] !== null) url += '#' + hash[1]; return url; } else return url; } } 

अद्यतन करें

क्वेरी बग में पहले पैरामीटर को निकालने पर एक बग था, मैंने एक फ़िक्ले को शामिल करने के लिए regex और टेस्ट पुनः चलाया है।

2 अद्यतन करें

@schellmax स्थिति को ठीक करने के लिए अपडेट करें जहां एक हैशटैग के पहले एक क्वेरी स्ट्रिंग चर सीधे हटाते समय हैशटैग प्रतीक खो जाता है

मुझे एक बड़ी संख्या के साथ एक regex समाधान नहीं दिख रहा है। लेकिन, खंड पहचानकर्ता को संरक्षित करने के लिए मत भूलना ( # बाद पाठ)

यहां मेरा समाधान है:

 function RemoveParameterFromUrl(url, parameter) { return url .replace(new RegExp('[?&]' + parameter + '=[^&#]*(#.*)?$'), '$1') .replace(new RegExp('([?&])' + parameter + '=[^&]*&'), '$1'); } 

और बब्बिंस का मुद्दा, हाँ – आपको भागने की ज़रूरत है पैरामीटर नामों में वर्ण

मान लें कि आप यूआरआई से key = val पैरामीटर निकालना चाहते हैं:

 function removeParam(uri) { return uri.replace(/([&\?]key=val*$|key=val&|[?&]key=val(?=#))/, ''); } 

एक समारोह के रूप में उपरोक्त संस्करण

 function removeURLParam(url, param) { var urlparts= url.split('?'); if (urlparts.length>=2) { var prefix= encodeURIComponent(param)+'='; var pars= urlparts[1].split(/[&;]/g); for (var i=pars.length; i-- > 0;) if (pars[i].indexOf(prefix, 0)==0) pars.splice(i, 1); if (pars.length > 0) return urlparts[0]+'?'+pars.join('&'); else return urlparts[0]; } else return url; } 

इस प्रश्न के आधार पर पैरामीटर जोड़ने और निकालने के लिए यह एक पूर्ण कार्य है और इस गिथूब का सार: https://gist.github.com/excalq/2961415

 var updateQueryStringParam = function (key, value) { var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''), urlQueryString = document.location.search, newParam = key + '=' + value, params = '?' + newParam; // If the "search" string exists, then build params from it if (urlQueryString) { updateRegex = new RegExp('([\?&])' + key + '[^&]*'); removeRegex = new RegExp('([\?&])' + key + '=[^&;]+[&;]?'); if( typeof value == 'undefined' || value == null || value == '' ) { // Remove param if value is empty params = urlQueryString.replace(removeRegex, "$1"); params = params.replace( /[&;]$/, "" ); } else if (urlQueryString.match(updateRegex) !== null) { // If param exists already, update it params = urlQueryString.replace(updateRegex, "$1" + newParam); } else { // Otherwise, add it to end of query string params = urlQueryString + '&' + newParam; } } window.history.replaceState({}, "", baseUrl + params); }; 

आप इस तरह पैरामीटर जोड़ सकते हैं:

 updateQueryStringParam( 'myparam', 'true' ); 

और इसे इस तरह हटा दें:

 updateQueryStringParam( 'myparam', null ); 

इस धागे में कई ने कहा कि रिजक्स संभवत: सबसे अच्छा / स्थिर समाधान नहीं है … तो 100% निश्चित नहीं है कि अगर इस बात में कुछ खामियां हैं, लेकिन जहाँ तक मैंने परीक्षण किया है, यह बहुत ठीक काम करता है।

यूरी के हेरफेर करने के लिए आपको लाइब्रेरी का इस्तेमाल करना चाहिए क्योंकि यह सतह पर ऐसा लगता है कि यह आपके लिए करना ज़्यादा जटिल है। इस पर एक नज़र डालें: http://medialize.github.io/URI.js/

मैं jQuery का उपयोग करता हूँ

 function removeParam(key) { var url = document.location.href; params = url.split('?'); if (params.length == 1) return; url = params[0] + '?'; params = params[1]; params = params.split('&'); $.each(params, function (index, value) { var v = value.split('='); if (v[0] != key) url += value + '&'; }); url = url.replace(/&$/, ''); url = url.replace(/\?$/, ''); document.location.href = url; } 

आधुनिक ब्राउज़रों को खोज पैरामीटर के साथ काम करने के लिए URLSearchParams इंटरफ़ेस प्रदान करते हैं। किसने विधि को हटा दिया है जो नाम परम को हटा देता है।

 if (typeof URLSearchParams !== 'undefined') { const params = new URLSearchParams('param1=1&param2=2&param3=3') console.log(params.toString()) params.delete('param2') console.log(params.toString()) } else { console.log(`Your browser ${navigator.appVersion} does not support URLSearchParams`) } 

मैं जो देख सकता हूं, ऊपर से कोई भी सामान्य पैरामीटर और सरणी मापदंडों को नियंत्रित नहीं कर सकता। यहाँ एक है जो करता है

 function removeURLParameter(param, url) { url = decodeURI(url).split("?"); path = url.length == 1 ? "" : url[1]; path = path.replace(new RegExp("&?"+param+"\\[\\d*\\]=[\\w]+", "g"), ""); path = path.replace(new RegExp("&?"+param+"=[\\w]+", "g"), ""); path = path.replace(/^&/, ""); return url[0] + (path.length ? "?" + path : ""); } function addURLParameter(param, val, url) { if(typeof val === "object") { // recursively add in array structure if(val.length) { return addURLParameter( param + "[]", val.splice(-1, 1)[0], addURLParameter(param, val, url) ) } else { return url; } } else { url = decodeURI(url).split("?"); path = url.length == 1 ? "" : url[1]; path += path.length ? "&" : ""; path += decodeURI(param + "=" + val); return url[0] + "?" + path; } } 

इसका इस्तेमाल कैसे करें:

 url = location.href; -> http://example.com/?tags[]=single&tags[]=promo&sold=1 url = removeURLParameter("sold", url) -> http://example.com/?tags[]=single&tags[]=promo url = removeURLParameter("tags", url) -> http://example.com/ url = addURLParameter("tags", ["single", "promo"], url) -> http://example.com/?tags[]=single&tags[]=promo url = addURLParameter("sold", 1, url) -> http://example.com/?tags[]=single&tags[]=promo&sold=1 

बेशक, एक पैरामीटर को अपडेट करने के लिए, बस तब जोड़ें जोड़ दें। इसके लिए एक डमी फ़ंक्शन बनाने के लिए स्वतंत्र महसूस करें।

इस थ्रेड पर सभी प्रतिक्रियाओं में एक दोष है कि वे URL के एंकर / टुकड़े हिस्से को संरक्षित नहीं करते हैं।

इसलिए यदि आपका यूआरएल दिखता है:

 http://dns-entry/path?parameter=value#fragment-text 

और आप 'पैरामीटर' को प्रतिस्थापित करते हैं

आप अपने टुकड़ा पाठ खो देंगे

निम्नलिखित जवाबों का अनुकूलन है (ल्यूक पीएच के माध्यम से बीबीआईएफ) जो इस समस्या को हल करता है:

 function removeParameter(url, parameter) { var fragment = url.split('#'); var urlparts= fragment[0].split('?'); if (urlparts.length>=2) { var urlBase=urlparts.shift(); //get first part, and remove from array var queryString=urlparts.join("?"); //join it back up var prefix = encodeURIComponent(parameter)+'='; var pars = queryString.split(/[&;]/g); for (var i= pars.length; i-->0;) { //reverse iteration as may be destructive if (pars[i].lastIndexOf(prefix, 0)!==-1) { //idiom for string.startsWith pars.splice(i, 1); } } url = urlBase + (pars.length > 0 ? '?' + pars.join('&') : ''); if (fragment[1]) { url += "#" + fragment[1]; } } return url; } 

Ssh_imov द्वारा समाधान का एक संशोधित संस्करण

 function removeParam(uri, keyValue) { var re = new RegExp("([&\?]"+ keyValue + "*$|" + keyValue + "&|[?&]" + keyValue + "(?=#))", "i"); return uri.replace(re, ''); } 

इस तरह कॉल करें

 removeParam("http://google.com?q=123&q1=234&q2=567", "q1=234"); // returns http://google.com?q=123&q2=567 

यह यूआरएल देता है / ओ कोई भी पैरामीटर प्राप्त करें:

 var href = document.location.href; var search = document.location.search; var pos = href.indexOf( search ); if ( pos !== -1 ){ href = href.slice( 0, pos ); console.log( href ); } 

यदि आप jQuery में हैं, तो एक अच्छी क्वेरी स्ट्रिंग हेरफेर प्लगइन है:

 function removeQueryStringParameter(uri, key, value) { var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); var separator = uri.indexOf('?') !== -1 ? "&" : "?"; if (uri.match(re)) { return uri.replace(re, ''); } }