জাভাস্ক্রিপ্ট রেজেক্স ব্যবহার করে একটি স্ট্রিং কীভাবে নিষ্কাশন করবেন?


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 পতাকাটি ব্যবহার করা দরকার :

একাধিক লাইন; শুরু এবং শেষের অক্ষরগুলি (^ এবং $) একাধিক লাইনের উপর কাজ করে দেখা (যেমন, প্রতিটি লাইনের শুরু বা শেষের সাথে মিলিত করুন (im n বা \ r দ্বারা বিসীমাবদ্ধ), পুরো ইনপুট স্ট্রিংয়ের একেবারে শুরু বা শেষ নয়)

এটিকে *সঠিক জায়গায় রাখুন:

"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]; 
}

আপনার এই পরিবর্তনগুলি দরকার:

  • *উপরের পরামর্শ অনুসারে প্রথম বন্ধনীর ভিতরে রাখুন । অন্যথায় আপনার মিলে যাওয়া গোষ্ঠীতে একটি মাত্র অক্ষর থাকবে।

  • ^এবং থেকে মুক্তি পান $। গ্লোবাল বিকল্পের সাথে তারা শুরু এবং লাইনের শেষের পরিবর্তে পুরো স্ট্রিংয়ের শুরু এবং শেষের সাথে মিলে। পরিবর্তে সুস্পষ্ট নিউলাইনগুলিতে ম্যাচ।

  • আমি মনে করি আপনি সম্পূর্ণ অ্যারের পরিবর্তে ম্যাচিং গ্রুপটি (প্রথম বন্ধনীতে কী রয়েছে) চান? arr[0]সম্পূর্ণ ম্যাচ ( "\nSUMMARY:...") এবং পরবর্তী সূচীগুলিতে গ্রুপের ম্যাচগুলি থাকে।

  • স্ট্রিং.ম্যাচ (রেজিএক্সএক্স) ম্যাচগুলির সাথে একটি অ্যারের ফেরত দেওয়ার কথা। আমার ব্রাউজারে এটি হয় না (ম্যাকের সাফারি কেবল পুরো ম্যাচটি দেয়, গ্রুপগুলি নয়), কিন্তু রেজিএক্সএক্স.এক্সেক (স্ট্রিং) কাজ করে।


1
আমি এটি বার্কম্যাডলির সাথে একত্রিত করব || [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

এইভাবে আপনি জাভাস্ক্রিপ্ট দিয়ে আইকল ফাইলগুলি পার্স করতে পারেন

    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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.