Próbuję wyodrębnić podciąg z pliku za pomocą JavaScript Regex. Oto wycinek z pliku:
DATE:20091201T220000
SUMMARY:Dad's birthday
pole, które chcę wyodrębnić, to „Podsumowanie”. Oto podejście:
extractSummary : function(iCalContent) {
/*
input : iCal file content
return : Event summary
*/
var arr = iCalContent.match(/^SUMMARY\:(.)*$/g);
return(arr);
}
źródło
|| [null, null]
ponieważ jeśli mecz się nie powiedzie,arr
byłby zerowy i rzuciłbyarr[1]
wyjątekTwoje wyrażenie regularne najprawdopodobniej chce
Pomocna sztuczka, której lubię używać, polega na domyślnym przypisywaniu przy dopasowaniu z tablicą.
var arr = iCalContent.match(/\nSUMMARY:(.*)$/g) || [""]; //could also use null for empty value return arr[0];
W ten sposób nie dostaniesz irytujących błędów typu, gdy zaczniesz używać
arr
źródło
match
zwraca wartość null, jeśli nie ma dopasowania(.*)
zamiast(.)*
to byłby początek. Ten ostatni przechwyci tylko ostatni znak w wierszu.Nie ma też potrzeby ucieczki z
:
.źródło
w ten sposób możesz analizować pliki iCal za pomocą javascript
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);
źródło