如何检查数字是否在更“口头”的字符串之前?

给定一个var dateText; 输出任何一个:

 dateText = "12-5 November 17 May 1954"; dateText = "12 January 1976"; dateText = "12 22 March 1965"; 

做完之后:

 for(var i = 0; i < dateText.length; i++) { d += dateText[i] + ' '; } var words = d.replace("–", " ").replace("-", " ").replace(",", " ").replace("/", " ").split(' '); words = $.grep(words, function(n, i){ return (n !== "" && n != null); }); var array = words; var newArray = array.filter(function(v){return v!==''}); for (const word of newArray) { if (months.has(word)) { localSpaceTime.Time.months.push(word); } else if (+word < 32) { localSpaceTime.Time.days.push(+word); } else if (+word < 2200) { localSpaceTime.Time.years.push(+word); } else if (/\w+/.test(word)) { localSpaceTime.Time.suffixes.push(word); } } 

设置一个数组如:

  var localSpaceTime = { Title : "", Time : { days : [], months : [], years : [], suffixes : [] } }; 

我们最终会像:

  var localSpaceTime = { Title : "", Time : { days : ["12", "5", "7"], months : ["november", "May"], years : ["1954"] } }; 

哪个没问题,但database不知道与哪个月12,5或7属于哪个关系。

我的想法是:

检查数字是否在语言字符串之前(这将是月份),如果是,则执行以下操作:

Eng目标:

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

我知道这是一个AI教学脚本与人类一样思考,但它是可行的,只是问我如何做,因为我没有想法。

UPDATE

另一个案例是:

 dateText = "12-5 November 17 May 1954 CE"; 

然后数组将是:

 var localSpaceTime = { Title : "", Time : { days : ["12", "5", "7"], months : ["november", "May"], years : ["1954"], suffix : ["CE"] } }; 

但是我们的最终目标是:

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

日期也可以

 1 May 1954 22-5 April 1970 

要么

 1-19 May 1954 

要么

 1-19, May 1954 21 April 1922 

要么

 1-19, May 1954 CE 21 April 1922 BC 

要么

 1-19, May 1954 CE 21 April 1922 BC 

由于我得到的结果,我会把它称为这一天的可能性,因此解析这些可以完成这项工作。

如果我们可以假设输入中唯一的非数字/空格/标点符号将是月份名称,并且格式始终如您所述,那么最简单的解决方案可能是split月份名称。 例如:

 const input = '12-5 November 17 May 1954'; console.log(input.split(/\s+([az]+)\s+/i)); // => [ '12-5', 'November', '17', 'May', '1954' ]