मान लिया जाये कि:
var someStr = 'He said "Hello, my name is Foo"';
console.log(someStr.replace(/['"]+/g, ''));
वह चाल चलनी चाहिए ... (यदि आपका लक्ष्य सभी दोहरे उद्धरण चिह्नों को बदलना है )।
यहां देखिए यह कैसे काम करता है:
['"]एक चरित्र वर्ग है, दोनों एकल और दोहरे उद्धरणों से मेल खाता है। आप इसे "केवल दोहरे उद्धरण चिह्नों से बदल सकते हैं ।
+: पूर्ववर्ती चार-वर्ग (वैकल्पिक) द्वारा परिभाषित एक या एक से अधिक उद्धरण, वर्ण,
g: वैश्विक ध्वज। यह JS को पूरे स्ट्रिंग में रेगेक्स लागू करने के लिए कहता है। यदि आप इसे छोड़ देते हैं, तो आप केवल एक चार्ट को बदल देंगे।
यदि आप किसी दिए गए स्ट्रिंग (यानी जोड़े में) के आसपास के कोट्स को निकालने की कोशिश कर रहे हैं, तो चीजें थोड़ी पेचीदा हो जाती हैं। आपको लुकअर्स असेसरीज का उपयोग करना होगा:
var str = 'remove "foo" delimiting double quotes';
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove foo delimiting quotes
str = 'remove only "foo" delimiting "';//note trailing " at the end
console.log(str.replace(/"([^"]+(?="))"/g, '$1'));
//logs remove only foo delimiting "<-- trailing double quote is not removed
रेगेक्स ने समझाया:
": शाब्दिक, किसी भी शाब्दिक से मेल खाता है "
(: समूह पर कब्जा करना शुरू करें। कोष्ठक ( ()) के बीच जो कुछ भी है , उस पर कब्जा कर लिया जाएगा, और प्रतिस्थापन मूल्य में इसका इस्तेमाल किया जा सकता है।
[^"]+: चरित्र वर्ग, 1 या अधिक बार को छोड़कर सभी वर्णों से मेल खाता "है
(?="): शून्य-चौड़ाई (कैप्चर नहीं की गई) सकारात्मक रूपांतर परख। पिछला मैच केवल तभी मान्य होगा जब उसका पालन "शाब्दिक रूप से किया जाएगा
): एंड कैप्चरिंग ग्रुप, हमने शुरुआती क्लोजिंग के बीच सब कुछ कैप्चर किया है "
": एक और शाब्दिक, सीएफ सूची आइटम एक
प्रतिस्थापन है '$1', यह पहले कैप्चर किए गए समूह का बैक-रेफरेंस है [^" ]+, डबल कोट्स के बीच में या प्रत्येक में किया जा रहा है । पैटर्न दोनों उद्धरणों से मेल खाता है और उन्हें क्या कहते हैं, लेकिन यह केवल उद्धरण के बीच में क्या है, इस प्रकार उन्हें प्रभावी रूप से हटा देता है।
यह क्या करता है some "string with" quotes-> के "string with"साथ बदलता है -> string with। उद्धरण गए, काम हो गया।
यदि उद्धरण हमेशा स्ट्रिंग के भीख और अंत में होने जा रहे हैं , तो आप इसका उपयोग कर सकते हैं:
str.replace(/^"(.+(?="$))"$/, '$1');
इनपुट के साथ remove "foo" delimiting ", आउटपुट अपरिवर्तित रहेगा, लेकिन इनपुट स्ट्रिंग को बदल दें "remove "foo" delimiting quotes", और आप remove "foo" delimiting quotesआउटपुट के साथ समाप्त हो जाएंगे ।
स्पष्टीकरण:
^": स्ट्रिंग ^और ए की शुरुआत से मेल खाता है "। यदि स्ट्रिंग ए से शुरू नहीं होती है ", तो अभिव्यक्ति पहले ही यहां विफल हो जाती है, और कुछ भी प्रतिस्थापित नहीं किया जाता है।
(.+(?="$)): मैच (और कैप्चर) सब कुछ, दोहरे उद्धरण चिह्नों सहित एक या अधिक बार, बशर्ते सकारात्मक रूपांतर सही हो
(?="$): पॉजिटिव लुकहेड ऊपर के समान ही है, केवल यह निर्दिष्ट करता है कि स्ट्रिंग का अंत " होना चाहिए ( $=== अंत)
"$: उस समाप्त होने वाली बोली से मेल खाता है, लेकिन उस पर कब्जा नहीं करता है
प्रतिस्थापन पहले की तरह से किया जाता है: हम मैच (जिसमें उद्घाटन और समापन उद्धरण शामिल हैं) को प्रतिस्थापित करते हैं, उनके साथ जो कुछ भी था।
आपने देखा होगा कि मैंने gध्वज (वैश्विक BTW के लिए) छोड़ दिया है , क्योंकि जब से हम पूरी स्ट्रिंग को संसाधित कर रहे हैं, यह अभिव्यक्ति केवल एक बार लागू होती है।
एक आसान रेगेक्स जो करता है, बहुत अधिक, एक ही चीज (रीजेक्स को कैसे संकलित / लागू किया जाता है, इसका आंतरिक अंतर होता है):
someStr.replace(/^"(.+)"$/,'$1');
पहले की तरह ^"और "$एक स्ट्रिंग के शुरू और अंत में परिसीमन उद्धरणों का (.+)मिलान करें, और बीच में सब कुछ मेल खाता है, और इसे कैप्चर करता है। मैं इस regex की कोशिश की है, एक तरफ ऊपर (लुकहैड जोर के साथ) और, सच में, मेरे surprize के लिए यह एक थोड़ा धीमा हो पाया। मेरा अनुमान यह होगा कि लुकअर्स अभिकथन पिछली अभिव्यक्ति को विफल करने का कारण बनता है जैसे ही इंजन निर्धारित करता "है कि स्ट्रिंग के अंत में कोई नहीं है । आह ठीक है, लेकिन अगर यह वही है जो आप चाहते हैं / आवश्यकता है, तो कृपया इस पर पढ़ें :
हालाँकि, इस अंतिम मामले में, यह कहीं अधिक सुरक्षित, तेज, अधिक रख-रखाव और ऐसा करने के लिए बेहतर है:
if (str.charAt(0) === '"' && str.charAt(str.length -1) === '"')
{
console.log(str.substr(1,str.length -2));
}
यहाँ, मैं जाँच कर रहा हूँ कि क्या स्ट्रिंग में पहला और आखिरी चार डबल कोट्स हैं। यदि वे हैं, तो मैं उन पहले और अंतिम वर्णों substrको काट रहा हूं । स्ट्रिंग्स, शून्य अनुक्रमित रहे हैं, ताकि पिछले चार है charAt(str.length -1)। substr2 तर्क की उम्मीद है, जहां पहली ऑफसेट है जिसमें से सबस्ट्रिंग शुरू होता है, दूसरा इसकी लंबाई है। चूँकि हम पिछले चार नहीं चाहते हैं, अब हम जितना पहले चाहते हैं, वह लंबाई है str.length - 2। आसान Peazy।
टिप्स :
लुकअर्स पर अधिक ध्यान दिया जा सकता है यहां
रेगेक्स बहुत उपयोगी हैं (और आईएमओ मज़ा), पहले थोड़ा सा चकरा देने वाला हो सकता है। इस मामले में कुछ और विवरण, और संसाधनों के लिंक दिए गए हैं।
यदि आप अभी तक रेगेक्स का उपयोग करके बहुत सहज नहीं हैं, तो आप उपयोग करने पर विचार कर सकते हैं:
var noQuotes = someStr.split('"').join('');
यदि स्ट्रिंग में बहुत सारे उद्धरण हैं, तो यह रेगेक्स का उपयोग करने से भी तेज हो सकता है