मैं एक स्ट्रिंग से दोहरे उद्धरण निकालना चाहता हूं


239

मैं ""एक स्ट्रिंग के आसपास निकालना चाहता हूं ।

जैसे अगर स्ट्रिंग है: "I am here"तो मैं केवल आउटपुट करना चाहता हूं I am here


4
आप केवल स्ट्रिंग का उपयोग क्यों नहीं करते हैं। ('' '', '')
आदर्श कुमार

69
str = str.replace(/"/g,"");
Mr_Green

11
क्या आप सभी उद्धरण या सीमा उद्धरण को हटाना चाहते हैं?
कोस

36
stackoverflow.com/q/19155566/989121 । क्या आप प्रत्येक ASCII वर्ण के लिए, एक बार 255 प्रश्न पूछने जा रहे हैं?
जॉर्ज

6
str = str.replace(/^"|"$/g, '');सीमा उद्धरण की जगह। Mr_Green का जवाब विश्व स्तर पर सभी को बदल देगा "जो अच्छा नहीं है
Kolob Canyon

जवाबों:


387

मान लिया जाये कि:

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('');

यदि स्ट्रिंग में बहुत सारे उद्धरण हैं, तो यह रेगेक्स का उपयोग करने से भी तेज हो सकता है


1
@rid: मैंने संपादित किया, अभिव्यक्ति क्या करती है, और इसे कैसे अनुकूलित किया जाए, इस पर थोड़ा विस्तार करते हुए
एलियास वान ओटेगेम

83
str = str.replace(/^"(.*)"$/, '$1');

यदि वे स्ट्रिंग के पहले और अंतिम वर्ण हैं, तो यह regexp केवल उद्धरण हटा देगा। F.ex:

"I am here"  => I am here (replaced)
I "am" here  => I "am" here (untouched)
I am here"   => I am here" (untouched)

63

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

str = str.slice(1, -1);

slice एक नियमित अभिव्यक्ति की तुलना में बहुत कम उपरि है।


8
क्यों घटता है? '' मैं यहाँ हूँ ''। स्लाइस (1, -1) -> 'मैं यहाँ हूँ' '!
darrinm

2
आश्चर्य की बात यह है कि जब से आप RDF शाब्दिक (N3 में, उदाहरण के लिए, URI आमतौर पर पसंद किए जाते हैं <uri>और जैसे शाब्दिक होते हैं "literal") के साथ काम कर रहे हैं, तो यह ठीक उसी तरह का परिवर्तन है, जिसकी आपको आवश्यकता है । तो यहाँ एक उत्थान है। ;)
मार्क बिर्बेक

2
(विशेष रूप से क्योंकि मूल प्रश्न कहता है कि वे एक स्ट्रिंग के आसपास के उद्धरणों को हटाना चाहते हैं ।)
मार्क बिर्बेक

2
यह स्वीकृत उत्तर होना चाहिए क्योंकि यह वही है जो पूछा गया है, और यह कुशलता से करता है।
पास्कल

38

यदि आपके पास अपने डेटा पर नियंत्रण है और आप जानते हैं कि आपके दोहरे उद्धरण स्ट्रिंग को घेरते हैं (तो स्ट्रिंग के अंदर प्रकट नहीं होते हैं) और स्ट्रिंग एक पूर्णांक है ... इसके साथ कहें:

"20151212211647278"

या इसके समान यह अच्छी तरह से आसपास के उद्धरणों को हटा देता है

JSON.parse("20151212211647278");

आला की जरूरतों के लिए हालांकि एक सार्वभौमिक जवाब नहीं है


इसके साथ फ़ायरफ़ॉक्स पर त्रुटि होगी: सिंटेक्सएयर: JSON.parse: JSON डेटा की पंक्ति 1 कॉलम 1 पर अप्रत्याशित चरित्र
बेन प्रिटोरियस

नहीं ... फ़ायरफ़ॉक्स की वर्तमान ताज़ा रिलीज़ पर ठीक काम करता है
स्कॉट स्टेंसलैंड

JSON.parse ( "{123,123}"); यह आपके उत्तर को उड़ा देगा
अभिजीत

3
JSON.parse("20151212211647278dfvs"); SyntaxError: Unexpected token d in JSON at position 17
सिस्टम रिबूटर

1
मुझे एक त्रुटि मिली SyntaxError: अप्रत्याशित टोकन <JSON में स्थिति 0 पर
फ्रेडी सिदौरुक

16

यदि आप केवल सीमा उद्धरण हटाना चाहते हैं:

function stripquotes(a) {
    if (a.charAt(0) === '"' && a.charAt(a.length-1) === '"') {
        return a.substr(1, a.length-2);
    }
    return a;
}

यदि यह नहीं दिखता है तो यह दृष्टिकोण स्ट्रिंग को स्पर्श नहीं करेगा "text in quotes"


2
a.charAt(x)यदि आप चाहते हैं तो उपयोग करें <ECMA5 समर्थन (f.ex IE7)।
डेविड हेलसिंग

8

यदि आप केवल शुरुआत या अंत से उद्धरण हटाना चाहते हैं, तो निम्नलिखित नियमित अभिव्यक्ति का उपयोग करें:

'"Hello"'.replace(/(^"|"$)/g, '');

1
ध्यान दें कि यह भी बदल जाएगा "fooऔर foo"। इनमें से पूरी जोड़ी को छोड़ना चाहते हैं।
कोस

नोट के लिए धन्यवाद, मैंने सोचा कि यह एक अपेक्षित व्यवहार था, हालांकि।
डेनिस

5

अपनी समस्या को इस तरह से हल करना जो एक नियमित अभिव्यक्ति के रूप में व्यक्त करना आसान हो:

उन वर्णों के विकल्प प्राप्त करें जो शून्य या एक अग्रणी दोहरे-उद्धरण और शून्य या एक अनुगामी दोहरे-उद्धरण के बीच समाहित हैं।

यहां बताया गया है कि rexxp ऐसा करता है:

  var regexp = /^"?(.+?)"?$/;
  var newStr = str.replace(/^"?(.+?)"?$/,'$1');

Regexp को तोड़ना:

  • ^"? शून्य या एक प्रमुख दोहरे उद्धरण के लिए एक लालची मैच
  • "?$ शून्य या एक अनुगामी डबल-कोट्स के लिए एक लालची मैच
  • उन दो अन्य सभी पात्रों के एक गैर-लालची कब्जा बुक करते हैं (.+?), जिसमें लक्ष्य के रूप में शामिल होगा $1

इसके लिए वापसी होगी delimited "string" here:

str = "delimited "string" here"  // ...
str = '"delimited "string" here"' // ...
str = 'delimited "string" here"' // ... and
str = '"delimited "string" here'

5

आलसी लोगों के लिए एक लाइनर

var str = '"a string"';
str = str.replace(/^"|"$/g, '');

यह सबसे उपयुक्त उत्तर है। /"/gके लिए काम नहीं करेगा "My name is \"Jason\""
जेसन लियू

यह उत्तर शुरुआत और अंत में प्रत्येक उद्धरण को हटा देता है , जो " - is a quoteस्ट्रिंग के मामले में अच्छा नहीं है , इसलिए यह लगभग
vladkras

2

यह काम...

var string1 = "'foo'";
var string2 = '"bar"';

function removeFirstAndLastQuotes(str){
  var firstChar = str.charAt(0);
  var lastChar = str[str.length -1];
  //double quotes
  if(firstChar && lastChar === String.fromCharCode(34)){
    str = str.slice(1, -1);
  }
  //single quotes
  if(firstChar && lastChar === String.fromCharCode(39)){
    str = str.slice(1, -1);
  }
  return str;
}
console.log(removeFirstAndLastQuotes(string1));
console.log(removeFirstAndLastQuotes(string2));


कोड गलत है। खाली स्ट्रिंग इनपुट का प्रयास करें, या 'foo"बस या प्रयास करेंfoo"
Pavel P

1
var expressionWithoutQuotes = '';
for(var i =0; i<length;i++){
    if(expressionDiv.charAt(i) != '"'){
        expressionWithoutQuotes += expressionDiv.charAt(i);
    }
}

यह आपके काम आ सकता है।


0

यदि आप स्ट्रिंग में सभी दोहरे उद्धरणों को हटाना चाहते हैं, तो उपयोग करें

var str = '"some "quoted" string"';
console.log( str.replace(/"/g, '') );
// some quoted string

अन्यथा आप स्ट्रिंग के चारों ओर केवल उद्धरण निकालना चाहते हैं, उपयोग करें:

var str = '"some "quoted" string"';
console.log( clean = str.replace(/^"|"$/g, '') );
// some "quoted" string

0

यह सरल कोड भी काम करेगा, उदाहरण के लिए हटाने के लिए दोहरे उद्धरण के साथ घिरे स्ट्रिंग से डबल उद्धरण:

var str = 'remove "foo" delimiting double quotes';
console.log(str.replace(/"(.+)"/g, '$1'));

0

यदि आप दोहरे उद्धरण चिह्नों को हटाने की कोशिश कर रहे हैं, तो निम्नलिखित का प्रयास करें

  var Stringstr = "\"I am here\"";
  var mystring = String(Stringstr);
  mystring = mystring.substring(1, mystring.length - 1);
  alert(mystring);

0

यह कोड टेक्स्टबॉक्स में शो नंबर के लिए बहुत बेहतर है

$ (यह) = [आपका टेक्स्टबॉक्स]

            var number = $(this).val();
            number = number.replace(/[',]+/g, '');
            number = number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
            $(this).val(number); // "1,234,567,890"

-2

कृपया स्ट्रिंग से दोहरे उद्धरणों को हटाने के लिए regex का अनुसरण करें।

    $string = "I am here";
    $string =~ tr/"//d;
    print $string;
    exit();

2
वे एक जावास्क्रिप्ट समाधान चाहते हैं!
पूर्ण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.