• Как сделать анализ скобок в тексте?

    0xD34F
    @0xD34F
    Есть такая структура данных - стек называется.

    При встрече открывающей скобки добавляем в результирующий массив пару индексов - открывающей и закрывающей скобок. Второе значение, так как закрывающей скобки ещё нет, пока будет null. В стек сохраняем индекс, под которым добавленная пара оказалась в массиве с результатами.

    Встретили закрывающую скобку - извлекаем из стека индекс последнего неполного результата, заменяем там null на индекс встреченной скобки. Конечно, если в стеке что-то есть. Если стек пустой - значит, у встреченной закрывающей скобки не было соответствующей ей открывающей, добавляем в результирующий массив пару из null и текущего индекса.

    function bracketIndices(str) {
      const stack = [];
      const result = [];
    
      for (let i = 0; i < str.length; i++) {
        if (str[i] === '{') {
          stack.push(result.push([ i, null ]) - 1);
        } else if (str[i] === '}') {
          if (stack.length) {
            result[stack.pop()][1] = i;
          } else {
            result.push([ null, i ]);
          }
        }
      }
    
      return result;
    }
    
    
    bracketIndices('{}{{{}}}') // [[0,1],[2,7],[3,6],[4,5]]
    bracketIndices('---}{{}{') // [[null,3],[4,null],[5,6],[7,null]]
    bracketIndices('fuck off') // []
    Ответ написан
    1 комментарий
  • SVG, как выровнять обводку внутри холста?

    RAX7
    @RAX7
    Альтернативное решение для подобных случаев - включить overflow: visible для svg https://jsfiddle.net/hbtg1dqs/
    Ответ написан
    Комментировать
  • Удалить/добавить слово в предложение на чистом js?

    @LJ322
    Потому что метод replace возвращает строку, а не изменяет. Строки в JS это неизменяемый тип данных. В данном примере нужно вернуть новый результат:
    lab.textContent = lab.textContent.replace(/ pineapple/g, '')

    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    Ответ написан
    1 комментарий