Регулярное выражение для получения только последние N чисел в JavaScript

1

Я пытаюсь создать регулярное выражение для этой строки:

  • case1: test-123456789 должен получить 56789
  • case2: test-1234-123456789 должен получить 56789
  • case3: test-12345 должен потерпеть неудачу или не дать ничего

то, что мне нужно, - это способ получить только последние 5 чисел только из 9 чисел

пока я это сделал:

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

он работает для первых 2 случаев, но не для последнего

Теги:

3 ответа

7

Вы можете использовать

/\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);
   }
}
1

Вы можете использовать положительный 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))
})
1

Вы можете попробовать следующее:

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

Этот способ поддерживает значение по умолчанию, если не найдено никакого соответствия (посмотрите на вставленный комментарий в строке выше кода.).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню