正则表达式仅用于获取javascript中的最后N个数字

时间:2018-10-22 13:14:06

标签: javascript regex

我正在尝试为此字符串生成一个正则表达式:

  • 案例1:test-123456789应该得到56789
  • case2:test-1234-123456789应该得到56789
  • 情况3:test-12345应该失败或什么都不给

我需要的是一种仅从9个数字中获取最后5个数字的方法

到目前为止,我做到了:

 case.match(/\d{5}$/)

它适用于前两种情况,但不适用于最后一种情况

3 个答案:

答案 0 :(得分:7)

您可以使用

/\b\d{4}(\d{5})$/

请参见regex demo。获取组1的值。

详细信息

  • \b-单词边界(确保数字块的长度为9位数字)-如果字符串末尾的数字块可以包含更多字符,请删除\b
  • \d{4}-四位数
  • (\d{5})-第1组:五位数字
  • $-字符串的结尾。

JS演示:

var strs = ['test-123456789','test-1234-123456789','test-12345'];
var rx = /\b\d{4}(\d{5})$/;
for (var s of strs) { 
  var m = s.match(rx);
  if (m) { 
     console.log(s, "=>", m[1]);
   } else {
     console.log("Fail for ", s);
   }
}

答案 1 :(得分:1)

您可以尝试以下方法:

var test="test-123456789";
console.log((test.match(/[^\d]\d{4}(\d{5})$/)||{1: null/*default value if not found*/})[1]);

这种方式支持找不到任何匹配项时的默认值(请看上面代码中的插入注释。)

答案 2 :(得分:1)

您可以在(?<= )后使用正号来断言您的5位数字以4位数字开头,而没有将其包括在结果中。

/(?<=\d{4})\d{5}$/

var inputs = [
"test-123456789", // 56789
"test-1234-123456789", // 56789
"test-12345", //fail or not giving anything
]

var rgx = /(?<=\d{4})\d{5}$/

inputs.forEach(str => {
  console.log(rgx.exec(str))
})