我有一个这样的字符串:
<星期一 - 星期四,太阳我想使用javascript / jquery将其转换为以下内容:
星期一,星期二,星期三,星期四,阳光
任何人都有任何想法如何做到这一点?
抱歉@jonmrich我之前没有在这里发布过。我不知道我必须分享我已经研究过的东西。
我查看了其他一些Stack Overflow问题/解决方案 特别是
regex split string with two separators
From Jquery how to determine split delimiter?
但无法弄清楚从哪里开始。
下次我问时,我会做得更好......感谢抬头。
答案 0 :(得分:0)
<强>解决方案强>
dayNames
days
,由逗号分隔的天数范围组成。dayCodes
以存储相关日期的索引。此代码遍历范围(在本例中为Mon-Thur和Sun)并创建特定范围的参数。如果范围只有一天,则其起始值将等于其结束值。该数组将填充包含dayNames
数组中的那些项的索引。matchedDays
的新数组,用于将索引与日期名称进行映射。迭代日代码(0-6)并向新数组推送与我们的代码匹配的dayNames
数组的一部分。 slice
功能非常方便。arr.reduce((a,b) => a.concat(b))
<强>小提琴强>
var dayNames = ["Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun"];
var days = "Mon - Thu, Sun"
var dayCodes = [];
var ranges = days.replace(/\s/g, "").split(",");
for (var i = 0; i < ranges.length; i++) {
var parameters = ranges[i].split('-');
var start = parameters[0];
var end = parameters.length == 2 ? parameters[1] : start;
dayCodes.push([dayNames.indexOf(start), dayNames.indexOf(end)]);
}
var matchedDays = [];
for (var i = 0; i < dayCodes.length; i++) {
if (dayCodes[i].length == 2) {
matchedDays.push(dayNames.slice(dayCodes[i][0], dayCodes[i][1] + 1));
}
else {
matchedDays.push(dayNames[dayCodes[i][0]]);
}
}
matchedDays = matchedDays.reduce((a,b) => a.concat(b));
console.log(matchedDays.join(', '));