У меня есть предложение, которое содержит атрибуты: "hey how <span target="">you</span>"

Я хотел бы поместить 'hey', 'how', '<span target="">you</span>' в массив.

Я использовал string.split(' ') и получил ['hey','how','<span','target="">you</span>']

Можно ли разделить все слова и одновременно использовать регулярное выражение, чтобы поймать слова, которые начинаются с < и заканчиваются >?

Спасибо

0
Seabon 12 Янв 2017 в 19:07

4 ответа

Лучший ответ

Если уровень вложенных тегов HTML равен нулю, это поможет:

console.log('hey how <span target="">you</span>'.match(/(?!<)\S+|<(\w+)\b[^]*?\/\1>/g));
1
revo 12 Янв 2017 в 16:27

Это должно сработать, но, как упомянул @Scott, регулярное выражение может не подходить для обработки html в зависимости от ваших данных.

const regex = /\<.+?>.*?\<.+?>|\S+/g;
const str = `hey how <span target="">you</span>`;

console.log(str.match(regex));
0
wdosanjos 12 Янв 2017 в 16:27

Я бы сказал, не разбирать HTML с помощью Regex. Использование функций jquery или javascript намного проще и безопаснее.

За,

<div id="sentence">
  hey how <span target="">you</span>
<div>

Сделай что-нибудь на линии

$("#sentence").text() // JQuery

Или

document.getElementById("sentence").innerText // Javascript

Оба дадут тебе -> эй как ты

0
Piyush 12 Янв 2017 в 22:04

Регулярное выражение не следует использовать для анализа html - RegEx сопоставляют открытые теги, кроме XHTML автономные теги

Может быть, вы должны использовать JQuery?

$("#txt").text()
0
Community 23 Май 2017 в 11:45