Я пытаюсь создать регулярное выражение для этой строки:
то, что мне нужно, - это способ получить только последние 5 чисел только из 9 чисел
пока я это сделал:
case.match(/\d{5}$/)
он работает для первых 2 случаев, но не для последнего
Вы можете использовать
/\b\d{4}(\d{5})$/
См. Демо-версию regex. Получите значение Group 1.
подробности
\b
- граница слова (чтобы убедиться, что числовые фрагменты имеют длину 9 цифр) - если ваши фрагменты цифр в конце строки могут содержать больше, удалите \b
\d{4}
- четыре цифры(\d{5})
- Группа 1: пять цифр$
- конец строки.JS demo:
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);
}
}
Вы можете использовать положительный lookbehind (?<= )
Чтобы утверждать, что ваша группа из 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))
})
Вы можете попробовать следующее:
var test="test-123456789";
console.log((test.match(/[^\d]\d{4}(\d{5})$/)||{1: null/*default value if not found*/})[1]);
Этот способ поддерживает значение по умолчанию, если не найдено никакого соответствия (посмотрите на вставленный комментарий в строке выше кода.).