Regex для захвата строки в одинарных кавычках в этом шаблоне ...? - PullRequest
0 голосов
/ 18 ноября 2011

Скажем, у меня есть элемент на моей HTML-странице, например:

<span class="special caption['This &lt;em&gt;expression&lt;/em&gt; describes this element.']">ABC</span>

Я бы хотел использовать jQuery для извлечения этого "заголовка" из атрибута класса. Я знаю, как изолировать

caption['This &lt;em&gt;expression&lt;/em&gt; describes this element.']

но что регулярное выражение может позволить мне извлечь

Это выражение описывает этот элемент.

Бонусные баллы, если я смогу включить escape-последовательность для апострофа, например

caption['This &lt;em style=\'color: #FF0000;\'&gt;expression&lt;/em&gt; describes this element.']

и получите

Это выражение описывает этот 'элемент.'

Спасибо за вашу помощь. Я действительно бросил вызов регулярным выражениям ....

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

Class - совершенно неправильное место, чтобы делать что-то подобное.

Это правильный путь:

<span data-caption="This <em style=\'color: #FF0000;\'>expression</em> describes this element."></span>

, а затем вы можете получить к нему доступ через jQuery:

$('span').attr('data-caption')
1 голос
/ 18 ноября 2011

Я не самый опытный с возможностями jQuery, но вы можете попробовать это выражение:

/class=".*?caption\['((?:\\'|[^'])*)'/m

Я знаю, что он способен найти любой атрибут class с классом caption иформатирование, которое у вас есть выше, внутри любой строки и сопоставление содержимого одинарных кавычек ('), что позволяет использовать одиночные кавычки (\').

С этим HTML:

<span class="special caption['This &lt;em&gt;expression&lt;/em&gt; describes this element.']">ABC</span>
<span class="special caption['This &lt;em style=\'color: #FF0000;\'&gt;expression&lt;/em&gt; describes this element.']">ABC</span>

он находит два совпадения (в группе захвата 1):

This &lt;em&gt;expression&lt;/em&gt; describes this element.
This &lt;em style=\'color: #FF0000;\'&gt;expression&lt;/em&gt; describes this element.

Надеюсь, это поможет вам!

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

1 голос
/ 18 ноября 2011

Вероятно, вам не следует помещать эту информацию в атрибут класса (см. Ответ locrizak), но если вам по какой-то причине это необходимо, читайте дальше.

Не думаю, что вам нужно регулярное выражение. Если вы уже знаете, как объяснить это:

caption['This &lt;em&gt;expression&lt;/em&gt; describes this element.']

... тогда все, что вам нужно сделать, это взять эту строку и подстроку, например:

var s = "caption['This &lt;em&gt;expression&lt;/em&gt; describes this element.']";
s = s.substring(9, s.length - 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...