регулярное выражение javascript - найти подстроку, заключенную в разделитель

1

Я хотел бы заменить все подстроки 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})

Изменение: в разделителе может быть больше одного вхождения подстроки.

  • 0
    Может ли быть более 1 вхождения?
  • 0
    подстроки? Да.
Теги:

1 ответ

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+ символы как можно меньше вплоть до самого левого появления двойных символов $.

  • 1
    Спасибо! Это работает отлично.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню