Показать сообщение отдельно
  #6 (permalink)  
Старый 20.08.2018, 00:10
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Вообще такие вещи делаются конечным автоматом, но по-быстрому можно и регуляркой нафигачить, как и все ребята выше
(версия игнорирующая незакрытые тэги и работающая со вложенностью):
var str = 'Оооочень большая строка текста, [color=красный]выделенный текст[/color], еще всякий текст текст текст [color=зелёный]еще выделенный текст[/color]! Ну и тд.';
var array_action = [];
var shift = 0;
var start = [];
var result = str.replace(/\[(\/?)color(?:\s*=\s*([^\]]+)\s*)?\]/g, function(full, end, color, index){
  if(end){
    if(end = start.pop()){
      end.index_end_action = index - shift;
      array_action.push(end);
    }
  } else {
    start.push({
      index_start_action: index - shift,
      color: color
    })
  }
  shift += full.length;
  return '';
});

console.log(result, array_action);
__________________
29375, 35

Последний раз редактировалось Aetae, 20.08.2018 в 00:17.
Ответить с цитированием