Если вхождение более двух раз подряд, замените это вхождение на новое слово angularjs.

У меня есть текст из бэкэнда с несколькими перерывами, приходящимися на 2 перерыва, 4 перерыва или 6 перерывов, и я хочу заменить перерывы на 2 перерыва. Например: если в строке у меня четыре непрерывных перерыва, то я хочу заменить эти разрывы только на 2 перерыва.

Я попробовал следующий код, но не сработало:

TMSApp.filter('newlinesmatch', function () {
    return function(text) {
        var str = '<br>';
        var count = (text.match(/<br>/g) || []).length;
        if(count > 2){
            return String(text).replace(/<br>/g,'<br><br>');    
        }
    }
});

кто-нибудь может помочь?

1 ответ

Решение

Вы можете заменить любое количество последовательных вхождений <br> с <br><br> как это:

TMSApp.filter('newlinesmatch', function () {
    return function(text) {
        return text.replace(/(<br>)+/g, '<br><br>');
    }
});

ПРИМЕЧАНИЕ: я знаю, что вы упомянули, что вы всегда будете получать 2, 4 или 6 последовательных перерывов. Тем не менее, стоит отметить, что решение, приведенное выше, заменит любое количество последовательных вхождений (даже одного) на <br><br>,

РЕДАКТИРОВАТЬ:

Согласно приведенному ниже комментарию с РЕАЛЬНЫМ примером, я внес изменения ниже. Обратите внимание, что оригинальный ответ работает для первоначально описанного сценария, где нужно было заменить CONSECUTIVE. <br>s. РЕАЛЬНЫЙ пример не имеет последовательных <br>с, так как между каждой парой есть пробел. Следующий код будет работать для этого случая:

.filter('newlinesmatch', function () {
    return function(text) {
      return text.replace(/(<br>\s*)+/g, '<br><br>');
    }
});

А вот рабочий поршень с предоставленными образцами данных:

http://plnkr.co/edit/ztcsbJoJ51ZF8FcJylbC?p=preview

Другие вопросы по тегам