Regex продвинутый способ заменить много выражений - PullRequest
0 голосов
/ 30 октября 2018

Я не нашел решения внутри regex's документации для моей текущей проблемы. Я использую JavaScript, HTML. Мой код такой:

var text = 'This [close](animal) is a dog';

Я хочу получить это, используя regex :

'This {animal} is a dog';

что я имею в виду, я хочу заменить 'close' на { и } . Я знаю, есть решение вроде:

var res = text.replace('[close](','{').replace(')','}');

но в моем случае у меня много правил, и я не хочу дублировать эту строку для этого. Иногда я использую другую замену, такую ​​как '[xxxxx]' . Любая идея? Спасибо!

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Не забывайте, что вы можете передать пользовательское регулярное выражение в Array.prototype.replace. В вашем случае это будет text.replace(/[close](/g,'{'). Полное решение вашего вопроса будет выглядеть так:

var res = res.replace(/\[\w+\]\((.*)\)/, (a, b) => {
  console.log(a, b);
  return `{${b}}`;
});

Скобки вокруг .*, используемые для «захвата» животного внутри переменной b

0 голосов
/ 30 октября 2018

Спасибо Wiktor , я нашел решение по тому, что вы сказали

var res0 = text.replace(/\[close]\(([^()]*)\)/g, '{$1}');
var res1 = text.replace(/\[open]\(([^()]*)\)/g, '}$1{');

Извините, если я ошибся, я не привык к английскому выражению, поэтому: -)

0 голосов
/ 30 октября 2018

Вы можете использовать

var text = 'This [close](animal) is a dog';
console.log(text.replace(/\[[^\][]*]\(([^()]*)\)/g, '{$1}'));

См. Демоверсию regex .

Детали

  • \[ - [ char
  • [^\][]* - 0 или более символов, отличных от [ и ]
  • ]\( - подстрока ](
  • ([^()]*) - Группа захвата 1: любые 0 или более символов, кроме ( и )
  • \) - ) char.

Замена {$1} - это содержимое группы захвата, заключенное в фигурные скобки.

Если вы можете иметь только два значения - close и open - внутри [...] и заменить close на {...} и open на }...{, вы можете использовать

var text = '[open](animal)This [close](animal) is a dog';
console.log(text.replace(/\[(open|close)]\(([^()]*)\)/g, function($0, $1, $2) { 
  return $1==='close' ? '{'+$2+'}' : '}'+$2+'{';})
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...