从JavaScript中不同格式的字符串中仅提取年份

时间:2018-10-15 09:59:25

标签: javascript regex

我有来自公共API的数据,我需要从该数据集中的列中提取年份。

该列中的文本具有不同的格式,所以我们说它是一个像这样的数组:

var array = ['ca 1940', '4 October 1935', '1915', 'Undated', 'ca 1921', '5 September 1925']

如何过滤此数组以具有如下数组:

var years = magical_method(array); 
// years = ['1940', '1935', '1915', '1921', '1925']
// Remove strings which do not have years and extract years from strings which do have years

任何帮助将不胜感激。

已更新:我已经尝试过:

function removeUndated(year) {
    if (year) {
      return year.match(/[\d]{1}/); 
    }
}

删除“无日期”字符串,但是我仍然不知道如何从具有上述不同格式的字符串中提取年份。

2 个答案:

答案 0 :(得分:1)

似乎年份值将是字符串的最后一个字,因此您可以将其与空格分开,然后获取最后一个字以检查它是否是整数,或者不满意它实际上是年份值

var array = ['ca 1940', '4 October 1935', '1915', 'Undated', 'ca 1921', '5 September 1925'];
var res = [];
array.forEach((item) => {
  var year = item.split(/\s+/).pop();
  if(parseInt(year)){
    res.push(year);
  }
});
console.log(res);

答案 1 :(得分:0)

您可以使用reduce函数创建一个数组,而在回调函数中,您可以拆分文本并仅获取最后一个值

var array = ['ca 1940', '4 October 1935', '1915', 'Undated', 'ca 1921', '5 September 1925'];


let x = array.reduce(function(acc, curr) {
  let x = curr.split(' ');
  if (!isNaN(x[x.length - 1])) {
    acc.push(x[x.length - 1])
  }
  return acc;
}, [])
console.log(x)