2013-03-26 6 views
12

में स्लैश मैं कई आगे की जगह के लिए एक नियमित अभिव्यक्ति की जरूरत है एक भी आगे स्लैश वाला URL में स्लैशRegex के लिए कई आगे मिलान यूआरएल

जैसे पेट के निम्नलिखित को छोड़कर http://link.com//whatever/// बन जाएगा http://link.com/whatever/

उत्तर

1

आप पहले से ही एक जवाब को स्वीकार कर लिया है। कुछ और मिलान और मैचों को नियंत्रित करने का विस्तार दिखाने के लिए, यह भविष्य में आपकी मदद कर सकता है:

var url = 'http://link.com//whatever///'; 
var set = url.match(/([^:]\/{2,3})/g); // Match (NOT ":") followed by (2 OR 3 "/") 

for (var str in set) { 
    // Modify the data you have 
    var replace_with = set[str].substr(0, 1) + '/'; 

    // Replace the match 
    url = url.replace(set[str], replace_with); 
} 

console.log(url); 

विल उत्पादन:

http://link.com/whatever/ 

दोहरी अपनी स्थिति में कोई फर्क नहीं होगा। आप इस स्ट्रिंग है:

var url = 'http://link.com//om/om/om/om/om///'; 

आपका set सरणी कई m// शामिल होंगे। थोड़ी अनावश्यक, क्योंकि लूप उस चर को कुछ बार देखेगा। अच्छी बात यह है कि String.replace() कुछ भी नहीं ढूंढता है अगर उसे कुछ भी नहीं मिलता है, इसलिए कोई नुकसान नहीं हुआ।

आप क्या कर सकते हैं पहले डुप्लिकेट को set से बाहर निकालें, लेकिन लगभग उसी संसाधन की आवश्यकता होगी क्योंकि केवल फॉर-लूप उन पर जा सके।

गुड लक!

28

मुझे लगता है कि यह काम करना चाहिए: /[^:](\/+)/ या /[^:](\/\/+)/ अगर आप केवल गुणकों चाहते हैं।

यह // से मेल नहीं खाता है, लेकिन ऐसा लगता है कि आप इसकी तलाश नहीं कर रहे हैं।

प्रतिस्थापित करने के लिए:

"http://test//a/b//d".replace(/([^:]\/)\/+/g, "$1") // --> http://test/a/b/d 

Working Demo

+0

जब मैं एक एकल फॉरवर्ड स्लैश के साथ मैचों को प्रतिस्थापित करने का प्रयास करता हूं तो वह पहले http: /link.co/whateve/ और दूसरा एक ttp: //link.co/whateve/ देता है। किसी कारण से यह पहले के पिछले चरित्र को हटा देता है। – geochr

+0

ओह, आप उन्हें _replace_ करना चाहते हैं, और सिर्फ _match_ नहीं? यह एक महत्वपूर्ण अंतर है। – Halcyon

+0

@ जेफशेवर नंबर: यह कुछ वर्ण –

-1
result = subject.replace(/(?<!http:)\/*\//g, "/"); 

या (http, https, FTP और FTPS के लिए)

result = subject.replace(/(?<!(?:ht|f)tps?:)\/*\//g, "/"); 
+0

मूल प्रश्न ने योजना को बदलने के बारे में कुछ भी नहीं पूछा। यह उत्तर प्रासंगिक नहीं है। – codeadventurer

संबंधित मुद्दे