выбрать текстовый элемент HTML с помощью регулярного выражения? - PullRequest
5 голосов
/ 30 октября 2011

Я хочу найти © в HTML-документе и получить сущность, к которой относится авторское право.

Строка авторского права показывает несколько разных способов:

<p class="bg-copy">&copy; 2011  The New York Times Company</p>

или

<a href="http://www.nytimes.com/ref/membercenter/help/copyright.html">
&copy; 2011</a> 
<a href="http://www.nytco.com/">The New York Times Company</a>

или

<br>Published since 1996<br>Copyright &copy; CounterPunch<br>
All rights reserved.<br>

Я хочу игнорировать даты и промежуточные теги и просто получить "The New York Times Company" или "Counterpunch".

Мне не удалось многого узнать об использовании регулярных выражений с JavaScript или JQuery, хотя у меня сложилось впечатление, что это может привести к серьезным головным болям. Если есть лучший подход к этому, дайте мне знать.

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

Для надежного решения вам, вероятно, потребуется сочетание навигации DOM и некоторой эвристики.Ваши примеры разрешимы с помощью регулярных выражений, но существует гораздо больше возможных сценариев ...

&copy;[\s\d]*(?:<\/.+?>[^>]*>)?([^<]*)

работает для ваших трех примеров.Но ТОЛЬКО для них и подобных им случаев.

См. На Рубуляр

Объяснение:

&copy; // copyright symbol
[\s\d]* // followed by spaces or digits 
(?:</.+?>[^>]*>)? // maybe followed by a closing tag and another opening one
([^<]*) // than match anything up to the next tag

См. этот ответ наКак использовать в JavaScript с JQuery.В основном вы можете использовать функцию соответствия (/ regex /):

var result = string.match(/&copy;[\s\d]*(?:<\/.+?>[^>]*>)?([^<]*)/)
0 голосов
/ 29 ноября 2011
$('*:contains(©)').filter(function(){
    return $(this).find('*:contains(©)').length == 0
}).text();

протестируйте здесь http://jsfiddle.net/unloco/kGPYA/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...