是否有一种方法仅使用替换仅返回匹配的组?
我有这个字符串
“ 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()
方法来做到这一点?
答案 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);