Есть ли способ вернуть только соответствующую группу, используя только замену?
У меня есть эта строка,
"xml version 2.1.2-emerald 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.info('Substitution result: ', result);
// desired result: "2.1.2-emerald"
За исключением того, что я хочу, чтобы результат содержал только совпадение. Есть ли способ сделать это с помощью метода replace()?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вместо 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.info(result[1]);Если может не быть совпадения, сначала проверьте, что результат не null:
const regex = /\sversion\s(.*?)\s/;
const str = `foo bar`;
const result = str.match(regex);
if (result) {
console.info(result[1]);
}Если вы хотите, чтобы полное совпадение было именно тем, что вы ищете, вы можете использовать ретроспективный просмотр, хотя это будет работать только в более новых браузерах и не является хорошим кросс-браузерным решением:
const regex = /(?<=\sversion\s)\S+/;
const str = `xml version 2.1.2-emerald https://www.example.com`;
const result = str.match(regex);
console.info(result[0]);Да, ключ в том, чтобы полностью собрать все строковые данные, а затем заменить их нужной группой:
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.info('Substitution result: ', result);
Это полный матч. (от
versionдо\sв самом конце схемы)