У меня есть быстрый вопрос о регулярном выражении, которое я написал на JavaScript. Это следующий (?<=,)(.*)(?=:), и он захватывает все между , и :. Однако я хочу, чтобы он зафиксировал и саму запятую, например.
So,<< this is what my regex captures at the moment>>: end станет
So<<, this is what my regex captures at the moment>>: end.
Я пытался использовать . перед , в регулярном выражении, но, похоже, это не работает.
Возможно ,[^:]+ или если вы хотите использовать группу захвата (,.*?):



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


Используйте простую группу захвата — она короче вашего текущего регулярного выражения и отлично работает:
var regex = /(,.*?):/g;
var string = "So,<< this is what my regex captures at the moment>>: end";
console.info(string.match(regex));Объяснение:
() - обозначает группу захвата, - сопоставьте запятую.?* - соответствует любому количеству любых символов: - сопоставьте запятую
Предполагая, что двойные стрелки предназначены для указания начала и конца того, что соответствует вашему текущему шаблону, вы можете сопоставить запятую, а затем 1+ раз не запятую, используя отрицательный класс символов:
,[^:]+
Если запятая в конце должна быть там, вы можете использовать группу захвата:
(,[^:]+):
Демонстрация регулярных выражений
Вы можете опустить положительный прогноз (?=:), просто сопоставив двоеточие, потому что вы уже используете группу захвата для получения совпадения.
const regex = /(,[^:]+):/;
const str = `So,<< this is what my regex captures at the moment>>: end`;
let res = str.match(regex);
console.info(res[1]);Как ты сказал :
So,<< this is what my regex captures at the moment>>: end would become So<<, this is what my regex captures at the moment>>: end.
вы можете использовать replace вот так:
var str = `So,<< this is what my regex captures at the moment>>: end`;
var replace = str.replace(/(.*?)(,)(<<)(.*)/,"$1$3$2$4");
console.info(replace);
Нравится regex101.com/r/evg4kf/1? Или regex101.com/r/evg4kf/2.