Я хотел бы заменить все подстроки substr
, которые заключены в $$
Например, рассмотрим строку
some substr $$This substr is enclosed by the delimiter$$ another substr
должен вернуться
some substr $$This newsubstr is enclosed by the delimiter$$ another substr
Что я до сих пор
(?:\${2})[^$]*(substr)[^$]*(?=\${2})
Изменение: в разделителе может быть больше одного вхождения подстроки.
Вам нужно сначала совместить все подстроки между $$
а затем заменить другой шаблон только внутри этих совпадений.
var s = "some substr $$This substr is enclosed by the delimiter$$ another substr";
var rxDollars = /\${2}[\s\S]*?\${2}/g;
var rxSubstr = /substr/g;
console.log(
s.replace(rxDollars, function(match) { return match.replace(rxSubstr, "newsubstr"); })
);
Еще одна модификация, чтобы выполнить замену только на текст между $$
.
var s = "some substr $$This substr is enclosed by the delimiter$$ another substr";
var rxDollars = /\${2}([\s\S]*?)\${2}/g;
var rxSubstr = /substr/g;
console.log(
s.replace(rxDollars, function(match, group1) { return "$$" + group1.replace(rxSubstr, "newsubstr") + "$$"; })
);
Вам нужно будет отрегулировать регулярное выражение rxSubstr
в соответствии с вашими реальными потребностями.
Паттерн \${2}[\s\S]*?\${2}
просто соответствует двум символам $
, тогда любые 0+ символы как можно меньше вплоть до самого левого появления двойных символов $
.