2013-11-15 3 views
0

Я пишу javascript, и мне нужно выбрать текст с помощью RegExp. Читы не помогают мне.RegExp для html-tag entrie

У меня есть текст:

Some dummy text and nothing more.<address style='text-align: right;'><span style='color: #EA5528; font: 13px Arial !important;'>asd</span></address> 

Так что я хочу, чтобы удалить все, кроме текста: адрес-тег и все, что находится внутри. Ожидаемый результат:

Some dummy text and nothing more. 

Ничего особенного, но я новичок в RegExps.

ответ

1

Если вы можете иметь вложенные address теги, регулярное выражение будет довольно сложно построить.

Если нет, вы можете заменить "<address .*?</address>" на "".

Javascript: .replace(/<address .*?<\/address>/g, "");

В противном случае используйте анализатор;)

Некоторый документ: http://www.regular-expressions.info/repeat.html, главу "Лей Вместо жадности".

+0

'.replace (/ <адрес. *? <\/address>/g," ")' это то, что я хотел. Хорошо работает, спасибо. –

1

Как насчет создания элемента из HTML и выбора первого ребенка? Пусть ваш браузер делать тяжелую работу:

var elem = document.createElement(); 
elem.innerHTML = "Some dummy text and nothing more.<address style='text-align: right;'><span style='color: #EA5528; font: 13px Arial !important;'>asd</span></address>"; 
console.log(elem.firstChild.nodeValue); 

jsFiddle

Это создает пустой HTML-элемент, затем устанавливает HTML для вашего требуемого HTML. Теперь ваш браузер видит все это, как что-то вроде:

<Node> 
    Some dummy text and nothing more.<address style='text-align: right;'><span style='color: #EA5528; font: 13px Arial !important;'>asd</span></address> 
</Node> 

Теперь, он также разрушает unrwapped текст в «текстовые узлы». Так firstChild из Node элемента, который вы создали бы блок текста (или почти ничего, что не HTML-теги):

Некоторые манекен текста и ничего больше.

+0

Это работает. Но как? Вы создаете Element, чем вставляете текст с html, а на выходе я вижу только текст, волшебство! Что означает 'document.createElement()' без аргументов? –

+1

Добавлено объяснение. Думаю, я не смог бы создать элемент с пустым именем tagName (это первый аргумент createElement), но он работает. Вы можете легко заменить его элементом-заполнителем, таким как: document.createElement ("span") ' – CodingIntrigue

0

не использовать регулярные выражения для разбора HTML ...

Получить узел текст находится, цикл по ChildNodes, пропуская адреса узлов, собрать InnerText для остальных элементов.

что-то подобное может работать:

var element = document.getElementById('message'), 
    result = '', i = 0; 

for (i = 0; i < element.childNodes.length; i ++) 
{ 
    var e = element.childNodes.item(i); 
    if (e is HTMLElement && e.localName.toUpperCase() == 'ADDRESS') 
    { 
     // skip these 
    } else { 
     result += e.innerText; 
    } 
} 

Обратите внимание, что это не проверялось, набранный в текстовом поле SO и при условии, чтобы проиллюстрировать идею, а не для решения проблем миров.

Смежные вопросы