正则表达式 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);
有没有办法 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);