在字符串中的已知字符后查找变量子字符串
Find variable substring after known characters inside a string
我有以下字符串格式的 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
[=17 的第二个参数的值=]
我可以使用什么通用技术从字符串中提取每个 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);
我会在这里使用字符串拆分两次:
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);
我有以下字符串格式的 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
[=17 的第二个参数的值=]
我可以使用什么通用技术从字符串中提取每个 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);
我会在这里使用字符串拆分两次:
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);