有没有办法只获得正则表达式的一部分匹配?

时间:2016-08-12 19:19:43

标签: regex

如果我将/a(b|c)/g应用于“ab ac ad”,则会匹配“ab”和“ac”,但我只需要“a”。我不希望“广告”里面有“a”。

1 个答案:

答案 0 :(得分:2)

您似乎不需要捕获组,需要预测

/a(?=b|c)/g

请参阅此regex demo



console.log("abc\nacd".match(/a(?=b|c)/g));




Lookaheads仅检查字符串是否与模式匹配,但返回 true false ,是否可以返回匹配(或是否回溯到模式或不)。

另一种方法是在模式部分上使用您需要获取的捕获组:

 /(a)(?:b|c)/g

您需要的数据(a)将在第1组中。请参阅this regex demo



var re = /(a)(?:b|c)/g; 
var str = 'abc\nacd';
var res = [];
while ((m = re.exec(str)) !== null) {
  res.push(m[1]);
}
console.log(res);