在字符串中已知字符之后查找变量子字符串



我有以下字符串格式的RRULE:

DTSTART;TZID=America/Toronto:20160909T040000RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR;UNTIL=20161202T040000

我想将字符串的属性解析为它们各自的变量,以使用表单内部的输入进行更新。相同的RRULE属性将显示在每个字符串中,因此我知道例如DTSTART将始终在字符串中。

我考虑使用字符串方法search,通过名称指定属性,然后添加要添加的字符数,以获得实体和所需的位置,然后使用.substring()

例如,如果我试图提取UNTIL,我可以做:

export const parseUntilFromRRule = (rrule: string):Date => {
const posInRRule = rrule.search("UNTIL=");
const until = rrule.substring(posInRRule + 6);
return new Date(until);
};

然而,对于字符串中间的属性,其中值的长度可能会变化,这种方法不起作用,因为我不知道要传递到substring的第二个参数的值

我可以使用什么通用技术从字符串中提取每个RRULE属性

我会在这里使用两次字符串拆分:

var input = "DTSTART;TZID=America/Toronto:20160909T040000RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR;UNTIL=20161202T040000";
var rrule = input.split("RRULE:")[1].split(";")[0];
console.log(rrule);

您可以用分号分割,然后如果条目包含=,则用=分割每个结果,并将结果转换为对象:

const input = `DTSTART;TZID=America/Toronto:20160909T040000RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR;UNTIL=20161202T040000`;
const segments = input.split(';');
const entryKeyValues = Object.fromEntries(
segments.map(
segment => segment.includes('=')
? segment.split('=')
: [segment, '']
)
);
console.log(entryKeyValues);
console.log(entryKeyValues.UNTIL);

最新更新