我正在尝试为此字符串生成一个正则表达式:
我需要的是一种仅从9个数字中获取最后5个数字的方法
到目前为止,我做到了:
case.match(/\d{5}$/)
它适用于前两种情况,但不适用于最后一种情况
答案 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))
})