Извлечь все значения, соответствующие определенному шаблону - PullRequest
0 голосов
/ 14 мая 2019

У меня есть строка ввода

var input = 'J1,J2, J3';

Я использую следующий шаблон для извлечения значения группы

var regex = /(,? ?(?<JOUR>J[0-9]+)+)/

при извлечении групп, как показано ниже

var match = regex.exec(input);

match.groups содержит только одну группу.Как я могу получить все группы J1, J2 и J3 из входной строки?

Ответы [ 4 ]

1 голос
/ 14 мая 2019

Вы можете использовать .match строки, чтобы получить группы

input.match(/J[0-9]+/g)

var input = 'J1,J2, J3';
console.log(input.match(/J[0-9]+/gi))
0 голосов
/ 14 мая 2019

const input = 'J1,J2, J3,J10';
const regexJfollowOneDigit = /(J\d{1}(?!\d))/g
const regexJfollowOneOrMoreDigit = /(J\d+)/g
console.log(input.match(regexJfollowOneDigit))
console.log(input.match(regexJfollowOneOrMoreDigit))
0 голосов
/ 14 мая 2019

Можно принять во внимание начало строки и запятую с необязательным пробелом и удалить внешнюю группу, чтобы использовать только 1 группу захвата. Чтобы цифры не были частью большого слова, вы можете добавить границу слова \b

Обратите внимание, что вы можете опустить квантификатор + после )+, потому что это повторит группу и даст вам только значение последней итерации.

(?:^|[,-] ?)(?<JOUR>J[0-9]+)\b
  • (?:^|[,-] ?) Сопоставьте начало строки, запятую или дефис с дополнительным пробелом
  • (?<JOUR>J[0-9]+) Именованная группа захвата JOUR, совпадение J и затем 1+ цифр
  • \b Граница слова, чтобы цифры не были частью большего слова

Regex demo

Используйте exec , чтобы получить значение из первой группы захвата

const regex = /(?:^|, ?)(?<JOUR>J[0-9]+\b)+/g;
let m;

[
  "J1, J2, J3 - J5, J7",
  "J1,J2, J3"
].forEach(str => {
  while ((m = regex.exec(str)) !== null) {
    if (m.index === regex.lastIndex) {
      regex.lastIndex++;
    }
    console.log(m[1]);
  }
});
0 голосов
/ 14 мая 2019

Совпадение с заглавной буквы J, затем любое количество чисел:

var input = 'J1,J2, J3';
var regex = /J[0-9]+/g;
console.log(input.match(regex));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...