gpt4 book ai didi

javascript - 使用JS从icalendar文件中读取参数

转载 作者:行者123 更新时间:2023-11-28 20:38:15 31 4
gpt4 key购买 nike

我想使用 JavaScript 从 iCalendar 文件中读取多个参数。

文件输入如下所示:

BEGIN:VEVENT DTSTART:20121127T190000Z DTEND:20121127T210000Z DTSTAMP:20121130T185808Z UID:q4sbrtajjol1hlpiijpho5jac0@google.com CREATED:20121102T191519Z DESCRIPTION:1. Bundesliga\, 14. Spieltag \n\nhttp://www.fussball-spielplan. info LAST-MODIFIED:20121127T211459Z LOCATION:Commerzbank-Arena\, Frankfurt SEQUENCE:10 STATUS:CONFIRMED SUMMARY:Eintracht Frankfurt - 1. FSV Mainz 05 (1:3) TRANSP:TRANSPARENT END:VEVENT

参数标签是:

DTSTART:
DTEND:
DTSTAMP:
UID:
CREATED:
DESCRIPTION:
LAST-MODIFIED:
LOCATION:
STATUS:
SUMMARY:
TRANSP:

我想读取这些参数背后的值。值的长度大多是可变的。

使用 RegExp 非常困难,因为我目前不知道要设置什么作为分隔符。"\n" 不起作用,因为所有文本部分都用空格分隔。但是,如果我使用空格分隔符 "\s" ,它将在每个单词之后分开,这不是想要的结果,特别是对于包含较长文本的参数 DESCRIPTION:

我的源代码目前如下所示:

file_reader.onload = function (evt) {
document.getElementById("filedrag").textContent = evt.target.result;

Output(
"<p>File information: <strong>" + file.name +
"</strong> type: <strong>" + file.type +
"</strong> size: <strong>" + file.size +
"</strong> bytes</p>");

var regexp = new RegExp("/DTSTART:(.*?)\s/", "g");
var file_content = evt.target.result;
var match, matches = [];

while ((match = regexp.exec(file_content)) != null) {
matches.push(match.index);
}

alert(matches);
}

有什么想法吗?我如何实现我的想法?

最佳答案

在您的代码中,您有

var regexp = new RegExp("/DTSTART:(.*?)\s/", "g"); 

但将字符串传递给 RegExp 构造函数时,不需要正则表达式分隔符 / - 它将被解释为要匹配的字符。此外,由于它是一个字符串,任何特殊的 RegExp 字符都需要进行双重转义,因此 \s 应该是 \\s

以下是获取每个指定标签的值的一种方法:

var match,
matches = [],
tags = 'DTSTART|DTEND|DTSTAMP|UID|CREATED|DESCRIPTION|' +
'LAST-MODIFIED|LOCATION|STATUS|SUMMARY|TRANSP',
regexp = new RegExp( '(?:' + tags + '):([\\s\\S]*?)(?=\\s+(?:' +
tags + '|SEQUENCE|END):)', 'g' );

while ( match = regexp.exec( file_content ) ) {
matches.push( match[1] );
}

如果要检索每个标记:值对,请将 match[1] 更改为 match[0]

上面假设每个标签之前至少有一个空格或换行符。
它还假设空格后跟标签名称,后跟 : 不会出现在任何标签的值中。

[\\s\\S] 用于代替 .,以便换行符可以包含在标记的值中。

上面没有捕获 SEQUENCE 标记的值,因为它未在列表中指定。
如果您想捕获它,只需将其添加到 tags 中并将其从 regexp 中删除,这样 '|SEQUENCE|END):)' 就变成 '|END):)'.

或者:

var m,
params = {},
rex = /([A-Z-]+):([\s\S]*?)(?=\s+[A-Z-]+:|$)/g;

while ( m = rex.exec( file_content ) ) {
params[ m[1] ] = m[2];
}

console.log( params["DTSTART"] ); // 20121127T190000Z

关于javascript - 使用JS从icalendar文件中读取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14909139/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com