#javascript #regex #match
#javascript #регулярное выражение #совпадение
Вопрос:
Мне нужно сопоставить с регулярным выражением javascript строку: bimbo999 из этого тега a: <a href="/game.php?village=828amp;amp;screen=info_playeramp;amp;id=29956" >bimbo999</a>
Числа из переменных URL (village и id) меняются каждый раз, поэтому я должен как-то сопоставлять числа с регулярным выражением.
</tr>
<tr><td>Sent</td><td >Oct 22, 2011 17:00:31</td></tr>
<tr>
<td colspan="2" valign="top" height="160" style="border: solid 1px black; padding: 4px;">
<table width="100%">
<tr><th width="60">Supported player:</th><th>
<a href="/game.php?village=828amp;amp;screen=info_playeramp;amp;id=29956" >bimbo999</a></th></tr>
<tr><td>Village:</td><td><a href="/game.php?village=828amp;amp;screen=info_villageamp;amp;id=848" >bimbo999s village (515|520) K55</a></td></tr>
<tr><td>Origin of the troops:</td><td><a href="/game.php?village=828amp;amp;screen=info_villageamp;amp;id=828" >KaLa I (514|520) K55</a></td></tr>
</table><br />
<h4>Units:</h4>
<table class="vis">
Я пытался с этим:
var match = h.match(/Supported player:</th>(.*)</a></th></i);
но не работает. Ребята, вы можете мне помочь?
Комментарии:
1. Почему вы манипулируете HTML напрямую? Гораздо безопаснее (и обычно проще) работать через DOM. Найдите правильные
<table>
, затем соответствующие<a>
теги в таблице, используя jQuery или библиотеку кросс-браузерного селектора, такую как Sizzle, а затем просто получите innerHTML<a>
тега, чтобы получить bimbo999.2. Использование регулярных выражений для обхода тегов html не очень хорошая практика. Вы пробовали создать элемент DOM из тега и получить innerHTML ?
Ответ №1:
Попробуйте это:
/<a[^>]*>([sS]*?)</a>/
<a[^>]*>
соответствует открывающемуa
тегу([sS]*?)
сопоставляет любые символы перед закрывающим тегом, как можно меньше</a>
соответствует закрывающему тегу
([sS]*?)
Фиксирует текст между тегами в качестве аргумента 1 в массиве, возвращаемом из exec
match
вызова or .
Это действительно хорошо только для поиска текста внутри a
элементов, это не очень безопасно или надежно, но если у вас большая страница ссылок, и вам просто нужен их текст, это подойдет.
Гораздо более безопасным способом сделать это без регулярного выражения было бы:
function getAnchorTexts(htmlStr) {
var div,
anchors,
i,
texts;
div = document.createElement('div');
div.innerHTML = htmlStr;
anchors = div.getElementsByTagName('a');
texts = [];
for (i = 0; i < anchors.length; i = 1) {
texts.push(anchors[i].text);
}
return texts;
}
Комментарии:
1.
/<a[^>]*>((?:.|r?n)*?)</a>/
также удобно для сопоставления со следующим закрывающим тегом по нескольким строкам.2. Он будет соответствовать уже нескольким строкам
s match any white space character [rntf ]
Ответ №2:
У меня нет опыта работы с регулярными выражениями, но я думаю, что вы можете использовать jQuery с .text()
!
Я имею в виду, если вы используете :
var hrefText = $("a").text();
Вы получите свой текст без использования регулярных выражений!
.find("a")
а затем выдает вам список объектов тегов a, а затем использует .each()
цикл для этого списка, после чего вы можете получить текст с помощью .text()
.
Или вы можете использовать селектор класса, идентификатор или что угодно!
Комментарии:
1. это также можно сделать с помощью обычного javascript
getElementsByTagName('a')
. Неплохая идея.2. В качестве примечания, не стоит использовать регулярное выражение для синтаксического анализа HTML 🙂