提取与特定模式匹配的所有值

时间:2019-05-14 09:31:17

标签: javascript node.js regex

我有一个输入字符串

var input = 'J1,J2, J3';

我正在使用以下模式提取组值

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

在提取以下组时

var match = regex.exec(input);

match.groups仅包含一组。如何从输入字符串中获取所有组J1 J2和J3?

4 个答案:

答案 0 :(得分:1)

您可以使用字符串的.match来获取组

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

var input = 'J1,J2, J3';
console.log(input.match(/J[0-9]+/gi))

答案 1 :(得分:0)

匹配大写字母J,然后匹配任意数量的数字:

var input = 'J1,J2, J3';
var regex = /J[0-9]+/g;
console.log(input.match(regex));

答案 2 :(得分:0)

您可以考虑字符串的开头和带有可选空格的逗号,并删除外部组以仅使用一个捕获组。为防止数字成为较大单词的一部分,您可以添加单词边界\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]);
  }
});

答案 3 :(得分:0)

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))