Написать регулярку
Есть строка вида
Код:
[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, время: 10:59. |