这是我的问题,假设我有一些字符串中带有数字的字符串,或者不是,然后是字符串末尾的一年或一年的范围。我需要能够匹配年末或年末的范围,但不能匹配字符串中的数字。这是我的意思的一个例子
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.
我从来没有真正使用正则表达式,它总是让我失望。任何帮助将不胜感激。谢谢
答案 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"]