正则表达式匹配年份而不是javascript中的其他数字

时间:2014-05-25 17:39:25

标签: javascript regex

这是我的问题,假设我有一些字符串中带有数字的字符串,或者不是,然后是字符串末尾的一年或一年的范围。我需要能够匹配年末或年末的范围,但不能匹配字符串中的数字。这是我的意思的一个例子

var str = 'CO2 emissions per capita 1990-2010'; //when run here I should get 1990-2010
var str2 = 'GHG emissions with LUCF 2010'; // when run from here I should get 2010

我已经非常接近了几次,但我的问题是我要么与二氧化碳中的2相匹配,要么在其他字符串中可能有一个()并且也匹配。这是我到目前为止尝试过的正则表达式。

var numRegex = /([\d-_\s])+$/;
var noTextRegex = /([^a-zA-Z\s]+)/;
var parts = numRegex.exec(str); //this matches the 2 in CO2
var partsTry2 = noTextRegex.exec(str); //this matches the 2 in CO2 as well but also matches () in other strings.

我从来没有真正使用正则表达式,它总是让我失望。任何帮助将不胜感激。谢谢

3 个答案:

答案 0 :(得分:2)

你可以这样做:

"ABC 1990-2010".match(/(\d{4}-\d{4}|\d{4})/g)
OUTPUT: ["1990-2010"]

"ABC 1990-2010 and also 2099".match(/(\d{4}-\d{4}|\d{4})/g)
OUTPUT: ["1990-2010","2099"]

"ABC 1990 and also 2099".match(/(\d{4}-\d{4}|\d{4})/g)
OUTPUT: ["1990","2099"]

"ABC 1990".match(/(\d{4}-\d{4}|\d{4})/g)
OUTPUT: ["1990"]

答案 1 :(得分:0)

他们总是四位数年?为什么不明确一点呢?

/(\d\d\d\d)/

或者,更优雅:

/(\d{4})/

答案 2 :(得分:0)

  

“我需要能够匹配最后年份或年龄 但是   不是字符串中的数字。“

这个怎么样?

var yearRegex = /(\d{4}|\d{4}\-\d{4})$/g;

"Blabla blabla 1998".match(yearRegex);//>>>["1998"]
"Blabla blabla 1998 aaaa".match(yearRegex);//>>> null
"Blabla blabla 1998-2000".match(yearRegex);//>>>["1998-2000"]