2009-10-22 16 views
27

के साथ एकल-कोट को बदलने के लिए रेगेक्स मैं एक ऐसी समस्या में भाग रहा हूं जो मुझे लगता है कि एक स्ट्रिंग के अंदर कुछ सिंगल कोट्स पर डबल-अप करने की आवश्यकता है। हालांकि, जेएस की स्ट्रिंग.रेप्लेस RegEx का उपयोग करती है, और मैंने हाथ से RegEx कभी नहीं बनाया है।दो एकल-कोट्स

क्या कोई मुझे एक एकल उद्धरण खोजने के लिए रेगेक्स बनाने में मदद कर सकता है और इसे दो सिंगल कोट्स से प्रतिस्थापित कर सकता है?

उत्तर

52

इस प्रयास करें:

yourstring = yourstring.replace(/'/g, "''") 
+0

नहीं - इस मामले में काम करना http://stackoverflow.com/q/30361748/285594 – YumYumYum

+0

@YumYumYum, उस स्थिति में आपको "सिंगल-कोट को दो एकल-कोट्स के साथ प्रतिस्थापित करने" की आवश्यकता नहीं है, लेकिन उस अतिरिक्त को एन्कोड करने के लिए अक्षर लोप। –

+0

आप जो कुछ भी आपने अभी उल्लेख किया है वह कैसे करते हैं? मैंने अपना रास्ता आजमाया है लेकिन असफल रहा है, मुझे सिंगल कोट और डबल कोट्स की आवश्यकता है क्योंकि यह डिस्प्ले और सबमिट करने के लिए है। – YumYumYum

4

str.replace(/'/g, "''");

वैश्विक मैच ध्वज (छ) का उपयोग करने के लिए इतना है कि आप स्ट्रिंग में किसी भी और सभी घटनाओं की जगह सुनिश्चित करें। अधिक जानकारी here

+0

एक एकल उद्धरण से एक दोहरे उद्धरण बनाता है यही कारण है, लेकिन जैसा कि ओपी पूछता है, दो एकल उद्धरण से एक भी बोली को प्रतिस्थापित नहीं करता। – Jesper

+0

सिर के लिए धन्यवाद। –

4

जे एस के string.replace रेगुलर एक्सप्रेशन से

ज़रूरी नहीं है का उपयोग करता है:

var str = "O'Reilly's books"; 
alert(str.replace("'", "''", 'g')); 

MDC's String replace संदर्भ:

पैटर्न एक स्ट्रिंग या एक रेगुलर एक्सप्रेशन

मम्म, मेरी कोड ऊपर IE6 पर काम नहीं लगता है हो सकता है, तो यह है कि हो जाएगा:

str.replace(/'/g, "''") 

की तरह अन्य लोगों ने कहा है, लेकिन इस तरह के सरल ऑपरेशन के लिए regexes का उपयोग overkill है।

1

मैं सटीक सिंटैक्स पता नहीं है, लेकिन आपको लगता है कि बाहर अपने आप को पा सकते हैं:

str.replace(/(?!')'(?!')/g, "''"); 

अभी तक इस परीक्षण नहीं किया है, लेकिन अगर यह काम करता है, यह भी का ही जगह आवृत्तियां का ख्याल रखता है एक पंक्ति में एक एकल उद्धरण। सभी ocurrences को बदलने के लिए जी संशोधक आवश्यक है।

+0

यह काम नहीं करता है। लेकिन, मैं वास्तव में इसे भी चाहता हूं क्योंकि मुझे इस ट्रांस्लेशन –

+0

की बेवकूफता के पीछे विचार पसंद है यहां जवाब है: http://stackoverflow.com/questions/6070275/regular-expression-match-only-non-repeated-occurrence- ऑफ-ए-कैरेक्टर –

2

ध्यान दें कि अगर आप नहीं चाहते कि रेगुलर एक्सप्रेशन का उपयोग करना चाहते हैं (और वहाँ अक्सर अच्छा कारण हैं नहीं), एक सरल स्ट्रिंग प्रतिस्थापन के लिए मुहावरा है: RegExp संस्करण है

str.split("'").join("''") 

हालांकि आमतौर पर मामूली तेज़ी से, स्ट्रिंग संस्करण एक जीत हो सकता है जब आप नहीं जानते कि खोज स्ट्रिंग में रेगेक्स-विशेष वर्ण (जैसे .) हो सकते हैं। इस प्रकार

function QuoteEncoding(strvalue) { 
    var strquotes = /(')/g; 
    return "'" + strvalue.replace(strquotes, "''") + "'"; 
} 

कॉल इस विधि:

+0

मैं आईई 7 का उपयोग कर रहा था और सोच रहा था कि इसके ऊपर के सभी जवाब क्यों काम नहीं कर रहे थे। एक बार जब मैंने यह str.split() लागू किया।() में शामिल हों() मेरे सभी एस्ट्रोफ़ेस सही ढंग से बदल दिए गए थे। किसी भी कारण से "जी" को अनदेखा किया जा रहा था। बुनियादी बातों को साझा करने के लिए धन्यवाद bobince! – fenix

2

आप रेगुलर एक्सप्रेशन का उपयोग करने की जरूरत नहीं है।

स्ट्रिंग patterm संस्करण:

str.replace("'", "''", 'g') 

RegExp पैटर्न संस्करण:

str.replace(/'/g, "''") 

यहाँ आप कुछ उपयोगी RegExp लिंक: