Написать регулярку
Есть строка вида
Код:
[shortcode] Нужна функция, которая строку между [shortcode] и [/shortcode] для каждого [shortcode] обернет в какой-то другой html, начало и конец которого нужно вывести в переменные. 1000р переводом |
Цитата:
|
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)); |
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> |
Что мешает
str = str.replaceAll("[shortcode]", "что то в начале") str = str.replaceAll("[/shortcode]", "что то в конце") |
voraa,
Напиши в личку, куда денег кинуть (ппц стыдоба, не допер до твоего варианта) |
voraa, могут быть вложенные, нужно же контент правильно забрать.
|
Viral, а теперь попробуй сделать вложенные [shortcode] :)
Либо я не понял твою задачу |
ruslan_mart,
С вложенными, вероятно, действительно не будет работать, но предполагается, что таких ситуаций не будет |
Цитата:
Там же все равно [shortcode] заменится на, скажем <div>, а [/shortcode] на </div>. Ну будут вложенные дивы. |
Часовой пояс GMT +3, время: 12:42. |