जावास्क्रिप्ट रेगेक्स का उपयोग करके एक स्ट्रिंग कैसे निकालें?


133

मैं जावास्क्रिप्ट रेगेक्स के साथ एक फ़ाइल से एक विकल्प निकालने की कोशिश कर रहा हूं। यहाँ फ़ाइल से एक टुकड़ा है:

DATE:20091201T220000
SUMMARY:Dad's birthday

जिस क्षेत्र को मैं निकालना चाहता हूं वह "सारांश" है। यहाँ दृष्टिकोण है:

extractSummary : function(iCalContent) {
  /*
  input : iCal file content
  return : Event summary
  */
  var arr = iCalContent.match(/^SUMMARY\:(.)*$/g);
  return(arr);
}

जवाबों:


88

आपको m ध्वज का उपयोग करने की आवश्यकता है :

बहु; शुरुआत और अंत वर्ण (^ और $) को कई लाइनों पर काम करने के रूप में समझें (यानी, प्रत्येक पंक्ति की शुरुआत या अंत से मेल खाएं (पूरे इनपुट स्ट्रिंग के बहुत शुरुआत या अंत ही नहीं)

इसके अलावा डाल *सही जगह में:

"DATE:20091201T220000\r\nSUMMARY:Dad's birthday".match(/^SUMMARY\:(.*)$/gm);
//------------------------------------------------------------------^    ^
//-----------------------------------------------------------------------|

97
function extractSummary(iCalContent) {
  var rx = /\nSUMMARY:(.*)\n/g;
  var arr = rx.exec(iCalContent);
  return arr[1]; 
}

आपको इन परिवर्तनों की आवश्यकता है:

  • *जैसा कि ऊपर सुझाया गया है, कोष्ठक के अंदर रखें । अन्यथा आपके मिलान समूह में केवल एक वर्ण होगा।

  • से छुटकारा ^और $। वैश्विक विकल्प के साथ वे लाइनों के शुरू और अंत के बजाय पूर्ण स्ट्रिंग के प्रारंभ और अंत पर मेल खाते हैं। इसके बजाय स्पष्ट newlines पर मिलान करें।

  • मुझे लगता है कि आप पूर्ण सरणी के बजाय मिलान समूह (कोष्ठक के अंदर क्या है) चाहते हैं? arr[0]पूरा मैच है ( "\nSUMMARY:...") और अगले इंडेक्स में ग्रुप मैच होते हैं।

  • String.match (regexp) मैचों के साथ एक सरणी वापस करने के लिए माना जाता है। मेरे ब्राउज़र में यह (सफारी ऑन मैक केवल पूर्ण मैच नहीं देता है, समूह नहीं), लेकिन Regexp.exec (string) काम करता है।


1
मैं इसे @barkmadley के साथ जोड़ दूंगा || [null, null]क्योंकि अगर मैच विफल arrहोता है , तो अशक्त हो जाएगा और arr[1]एक अपवाद फेंक देगा
कुणाल

22

आपकी नियमित अभिव्यक्ति सबसे अधिक संभावना है

/\nSUMMARY:(.*)$/g

एक उपयोगी छोटी सी चाल जिसका मैं उपयोग करना चाहता हूं, वह एक सरणी के साथ मैच पर डिफ़ॉल्ट रूप से असाइन करना है।

var arr = iCalContent.match(/\nSUMMARY:(.*)$/g) || [""]; //could also use null for empty value
return arr[0];

जब आप उपयोग करने जाते हैं तो इस तरह से आपको कष्टप्रद प्रकार की त्रुटियां नहीं होती हैं arr


2
matchअगर कोई मैच
कुणाल

7

(.*)इसके बजाय (.)*एक शुरुआत होगी। उत्तरार्द्ध लाइन पर केवल अंतिम चरित्र को कैप्चर करेगा।

इसके अलावा, भागने की कोई जरूरत नहीं है :


-1

यह है कि आप जावास्क्रिप्ट के साथ iCal फ़ाइलों को पार्स कैसे कर सकते हैं

    function calParse(str) {

        function parse() {
            var obj = {};
            while(str.length) {
                var p = str.shift().split(":");
                var k = p.shift(), p = p.join();
                switch(k) {
                    case "BEGIN":
                        obj[p] = parse();
                        break;
                    case "END":
                        return obj;
                    default:
                        obj[k] = p;
                }
            }
            return obj;
        }
        str = str.replace(/\n /g, " ").split("\n");
        return parse().VCALENDAR;
    }

    example = 
    'BEGIN:VCALENDAR\n'+
    'VERSION:2.0\n'+
    'PRODID:-//hacksw/handcal//NONSGML v1.0//EN\n'+
    'BEGIN:VEVENT\n'+
    'DTSTART:19970714T170000Z\n'+
    'DTEND:19970715T035959Z\n'+
    'SUMMARY:Bastille Day Party\n'+
    'END:VEVENT\n'+
    'END:VCALENDAR\n'


    cal = calParse(example);
    alert(cal.VEVENT.SUMMARY);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.