#javascript #html #string #algorithm #react-native
Вопрос:
Может ли кто-нибудь предложить простой* способ сделать следующее?
"this is lt;markgt;just anlt;/markgt; example lt;markgt;snippetlt;/markgt;"
Для
["this is", "lt;markgt;just anlt;/markgt;", "example", "lt;markgt;snippetlt;/markgt;" ]
Спасибо за ответ, ребята
этот фрагмент ниже также охватывает теги с атрибутами
"lt;b class="highlight"gt;Paradiselt;/bgt; Lost" .split(/(lt;w s (?!term).*?gt;.*?().*?lt;/[a-zA-Z]*gt;)/g) .filter((i) =gt; i)
Комментарии:
1. просто отредактировал вопрос, пожалуйста, взгляните. @Бармар
2. Используйте
split()
с регулярным выражением, которое соответствуетlt;markgt;...lt;/markgt;
. Поместите это в группу захвата, чтобы разделитель был включен в результат.3. Не забудьте сделать его не жадным.
4. @Barmar Можете ли вы дать фрагмент кода?
5. Я сказал тебе все, что тебе нужно сделать. Если вы не понимаете, прочитайте документацию, чтобы узнать больше.
Ответ №1:
Разделение с использованием регулярных выражений, но с учетом всех HTML-тегов и веб-компонентов с атрибутами, а не только lt;markgt;
.
function splitHTML (inputString) { return inputString .split(/(lt;[a-zA-Z-](?!term).*?gt;.*?().*?lt;/[a-zA-Z-]*gt;)/g) .filter((i) =gt; i); } console.log(splitHTML('this is lt;markgt;just anlt;/markgt; example lt;markgt;snippetlt;/markgt;'));
Приведенный выше код будет работать для:
lt;markgt;textlt;/markgt;
lt;my-tooltipgt;web componentlt;/my-tooptipgt;
lt;mark class="red"gt;colored textlt;/markgt;
Комментарии:
1. не удается для этого «lt;b класс=»выделить»gt;Райlt;b класс=»выделить»gt;lt;/bgt; Потеряно»
2. Приведенное ниже также подходит для оставшегося случая
"lt;b class="highlight"gt;Paradiselt;/bgt; Lost".split(/(lt;w s (?!term).*?gt;.*?().*?lt;/[a-zA-Z]*gt;)/g) .filter((i) =gt; i)
3. @MuhammadAshraf Спасибо, что поделился! Я немного изменил ваше регулярное выражение и обновил свой ответ
4. Вы также можете добавить
.map((i) =gt; i.trim())
«после.filter((i) =gt; i)
«, чтобы удалить пробелы по бокам. Я не включил это в приведенный выше код, так как он не был запрошен в вопросе.
Ответ №2:
Просто разделите регулярным выражением, это даст вам несколько пустых элементов.. после этого вы можете отфильтровать пустые элементы.
let a = "this is lt;markgt;just anlt;/markgt; example lt;markgt;snippetlt;/markgt;"; let x = a.split(/( lt;markgt;.*?().*?lt;/markgt;)/g); // ['one', '.two', '.three']; console.log(x.filter( (el) =gt;el) );
Ответ №3:
function splitHTML (inputString) { const result = []; // 1. Replace a HTML tag with ###lt;markgt; and lt;/markgt;### inputString = inputString.replaceAll('lt;mark', '###lt;mark'); inputString = inputString.replaceAll('lt;/markgt;', 'lt;/markgt;###'); // 2. Split on the newly added sign inputString = inputString.split('###'); // 3. Filter out empty lines and return the result return inputString.filter((a) =gt; a); } console.log(splitHTML('this is lt;markgt;just anlt;/markgt; example lt;markgt;snippetlt;/markgt;')); // =gt; ['this is ', 'lt;markgt;just anlt;/markgt;', ' example ', 'lt;markgt;snippetlt;/markgt;']
Ответ №4:
Попробуйте использовать заменить все, это сработает….
lt;input type="text" id="text" style="width:500px; max-width: 500px;"/gt; lt;scriptgt; const value = "this is lt;markgt;just anlt;/markgt; example lt;markgt;snippetlt;/markgt;"; var result = "["" value.replaceAll(" lt;markgt;", "", "lt;markgt;").replaceAll("lt;/markgt; ", "lt;/markgt;" , "") ""]"; document.getElementById("text").value = result; lt;/scriptgt;
Комментарии:
1. Я думаю, что им нужен массив, а не строка.
2. @Barmar Нет такого упоминания о том, что ему нужен массив, если ему нужен массив, то он может просто разделить его с помощью coma (,) после удаления скобок []
3. Вокруг желаемого результата нет кавычек.