gpt4 book ai didi

javascript - 如何将一个字符串拆分成对应的对象?

转载 作者:行者123 更新时间:2023-12-03 03:42:28 26 4
gpt4 key购买 nike

鉴于此:

const MATCH_NAME = /\s+([a-z]+)\s+/i;

function parseDates(input) {
const parts = input.split(MATCH_NAME);
const result = {
dates: [],
year: null
};

while (parts.length > 2) {
const [days, month, suffix] = parts.splice(0, 2);
result.dates.push({
month,
days: days.split(/\D+/),
suffix
});
}

result.year = parts[0];
return result;
}

console.log(parseDates('12-5 November 17 May 1954 CE'));
console.log(parseDates('1 January 1976 CE'));
console.log(parseDates('12 22 March 1965'));

年份对象最终类似于1976 CE,而CE应该位于后缀中。

尝试到达:

Month: November
Days: 12, 5
Month: May
Days: 17
Year: 1954
Suffix: CE

jsFiddle here

最佳答案

根据我的理解,你的模式是这样的:

  • 您有一个由空格分隔的值列表。
  • 值可以是数字或字母。
  • 如果是数字,
    • 如果<= 31 ,它是一天,应该被推送到天数组。
    • 如果天数超过 1,可以用连字符或空格分隔。
    • 否则就是年。
  • 如果是字母,
    • 如果后面跟着年份且长度小于 3(假设后缀为 2 位数字,并且您可以使用不带日期值的日期(例如:“2007 年 11 月”))
    • 否则就是月份了。

注意:如果我的理解是正确的,那么以下解决方案将对您有所帮助。如果没有,请分享不一致之处。

function parseDates(input) {
var parts = processHTMLString(input).split(/[-–,\/\s]/g);
var result = [];
var numRegex = /\d+/;
var final = parts.reduce(function(temp, c) {
if (numRegex.test(c)) {
let num = parseInt(c);
if (temp.year || (temp.month && num < 31)) {
result.push(temp);
temp = {};
}
temp.days = temp.days || []
if (c.indexOf("-") >= 0) {
temp.days = temp.days.concat(c.split("-"));
} else if (num > 31)
temp.year = c;
else
temp.days.push(c)
} else if (c.length < 3 && temp.year) {
temp.suffix = c
} else {
temp.month = c;
}
return temp;
}, {});
result.push(final);
return result;
}

function processHTMLString(str) {
var div = document.createElement("div");
div.innerHTML = str;
// This will process `&nbsp;` and any other such value.
return div.textContent;
}

console.log(parseDates('12-5 November 2007 ce 17 May 1954 Ce'));
console.log(parseDates('1 January 1976 CE'));
console.log(parseDates('12 22 March 1965'));

关于javascript - 如何将一个字符串拆分成对应的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45561450/

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