正则表达式 return 仅使用替换方法匹配组

RegEx to return only matching group using only replace method

有没有办法 return 只使用替换的匹配组?

我有这个字符串,

"xml version 2.1.2-emerald https://www.example.com"

我想从中提取版本。

我正在使用这个正则表达式:

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

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

除非我希望结果只包含匹配项。有没有办法用 replace() 方法做到这一点?

而不是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,尽管这只适用于较新的浏览器,并且不是一个好的 cross-browser 解决方案:

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

是的,关键是要完整收集整个字符串数据,然后替换成想要的组:

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

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

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