Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.01.2024, 16:40
Аватар для Viral
Профессор
Отправить личное сообщение для Viral Посмотреть профиль Найти все сообщения от Viral
 
Регистрация: 26.04.2011
Сообщений: 472

Написать регулярку
Есть строка вида
Код:
[shortcode]
<span>text</span> 123 
<b>text 123 </b>

(любые символы, включая переносы, многократные переносы и html-код)

text <i>123</i>
text 123 
[/shortcode]

[shortcode]
<span>text</span> 123 
<b>text 123 </b>

(любые символы, включая переносы, многократные переносы и html-код)

text <i>123</i>
text 123 
[/shortcode]
И таких блоков с [shortcode]какой-то html[/shortcode] может быть много.

Нужна функция, которая строку между [shortcode] и [/shortcode] для каждого [shortcode] обернет в какой-то другой html, начало и конец которого нужно вывести в переменные.

1000р переводом

Последний раз редактировалось Viral, 25.01.2024 в 16:43.
Ответить с цитированием
  #2 (permalink)  
Старый 25.01.2024, 17:04
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,682

Сообщение от Viral
обернет в какой-то другой html, начало и конец которого нужно вывести в переменные.
Не понятно. Пример можно? И что именно выводить в переменные?
Ответить с цитированием
  #3 (permalink)  
Старый 25.01.2024, 17:12
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,017

const CODE_PATTERN = /\[([\w-]+)\]([\s\S]*?)\[\/\1\]/;

const handlerMap = {
  shortcode: (content) => {
    console.log(content);
    return `<div class="foo">${content}</div>`;
  },
};

function parseCode(value) {
  let parsedValue = value;

  while (CODE_PATTERN.test(parsedValue)) {
    parsedValue = parsedValue.replace(CODE_PATTERN, (_matches, id, content) => {
      const idLower = id.toLowerCase();
      return handlerMap.hasOwnProperty(idLower) ? handlerMap[idLower](content) : content;
    });
  }

  return parsedValue;
}

console.log(parseCode(sourceText));
Ответить с цитированием
  #4 (permalink)  
Старый 25.01.2024, 17:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,050

Viral,
<!DOCTYPE HTML>
<html>

<head>
    <title>Untitled</title>
</head>

<body>
    <textarea id="txt" cols="30" rows="25">
[shortcode]
<span>text</span> 123
<b>text 123 </b>

(любые символы, включая переносы, многократные переносы и html-код)

text <i>123</i>
text 123
[/shortcode]

[shortcode]
<span>text</span> 123
<b>text 123 </b>

(любые символы, включая переносы, многократные переносы и html-код)

text <i>123</i>
text 123
[/shortcode]
</textarea>
    <textarea id="out" cols="30" rows="25">
</textarea>
    <script>
        const reg = /\[shortcode\]([\s\S]*?)\[\/shortcode\]/gm;
        const replace = (tag, endTag) => str => str.replace(reg, (_, html) => `${tag+html+endTag}`);
        const withDiv = replace('<div style="color: red">', '<\/div>');
        out.value = withDiv(txt.value);
    </script>
</body>

</html>
Ответить с цитированием
  #5 (permalink)  
Старый 25.01.2024, 17:19
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,682

Что мешает
str = str.replaceAll("[shortcode]", "что то в начале")
str = str.replaceAll("[/shortcode]", "что то в конце")
Ответить с цитированием
  #6 (permalink)  
Старый 25.01.2024, 17:44
Аватар для Viral
Профессор
Отправить личное сообщение для Viral Посмотреть профиль Найти все сообщения от Viral
 
Регистрация: 26.04.2011
Сообщений: 472

voraa,
Напиши в личку, куда денег кинуть
(ппц стыдоба, не допер до твоего варианта)
Ответить с цитированием
  #7 (permalink)  
Старый 25.01.2024, 17:45
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,017

voraa, могут быть вложенные, нужно же контент правильно забрать.
Ответить с цитированием
  #8 (permalink)  
Старый 25.01.2024, 17:47
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,017

Viral, а теперь попробуй сделать вложенные [shortcode]

Либо я не понял твою задачу
Ответить с цитированием
  #9 (permalink)  
Старый 25.01.2024, 17:49
Аватар для Viral
Профессор
Отправить личное сообщение для Viral Посмотреть профиль Найти все сообщения от Viral
 
Регистрация: 26.04.2011
Сообщений: 472

ruslan_mart,
С вложенными, вероятно, действительно не будет работать, но предполагается, что таких ситуаций не будет
Ответить с цитированием
  #10 (permalink)  
Старый 25.01.2024, 18:07
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,682

Сообщение от ruslan_mart
voraa, могут быть вложенные, нужно же контент правильно забрать.
А что, надо вложенные изымать? И куда их выносить?
Там же все равно [shortcode] заменится на, скажем <div>, а [/shortcode] на </div>.
Ну будут вложенные дивы.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать запросы с помощью swagger спецификации? jtag Node.JS 0 15.09.2018 17:05
На чем проще и быстрее написать небольшое Web-приложение? Pavel2017 Общие вопросы Javascript 4 09.12.2017 15:00
Помогите написать регулярку vovnet Общие вопросы Javascript 12 08.08.2017 13:54
Написать код, который проверяет знание таблицы умножения klink_patrick Общие вопросы Javascript 2 29.03.2017 20:36
Помогите написать регулярку starjons Общие вопросы Javascript 9 03.09.2014 18:16