RegEx仅使用替换方法返回仅匹配的组

时间:2019-07-01 03:13:11

标签: javascript regex regex-group

是否有一种方法仅使用替换仅返回匹配的组?

我有这个字符串

  

“ xml版本2.1.2-翡翠https://www.example.com

,我想从中提取版本。

我正在使用此RegEx:

const regex = /\sversion\s(.*?)\s/;
const str = `xml version 2.1.2-emerald https://www.example.com`;
const subst = `$1`;
const result = str.replace(regex, subst);

console.log('Substitution result: ', result); 
// desired result: "2.1.2-emerald"

除了我希望结果仅包含匹配项。是否可以使用replace()方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

代替replace,而代替match,并提取第一个捕获的组。您也可以使用(\S+)代替(.*?)\s

const regex = /\sversion\s(\S+)/;
const str = `xml version 2.1.2-emerald https://www.example.com`;
const result = str.match(regex);
console.log(result[1]);

如果可能不匹配,请首先检查结果是否不是null

const regex = /\sversion\s(.*?)\s/;
const str = `foo bar`;
const result = str.match(regex);
if (result) {
  console.log(result[1]);
}

如果您希望完全匹配只是您要寻找的内容,则可以使用lookbehind,尽管这仅适用于更新的浏览器,并且不是很好的跨浏览器解决方案:

const regex = /(?<=\sversion\s)\S+/;
const str = `xml version 2.1.2-emerald https://www.example.com`;
const result = str.match(regex);
console.log(result[0]);

答案 1 :(得分:1)

是的,关键是要完全收集整个字符串数据,然后将其替换为所需的组:

const regex = /.*\sversion\s(.*?)\s.*/gs;
const str = `xml version 2.1.2-emerald https://www.example.com`;
const subst = `$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);