正则表达式捕获这种模式中的单引号字符串......?

时间:2011-11-18 16:10:59

标签: jquery html regex escaping

假设我的HTML页面中有一个元素,如下所示:

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

我想使用jQuery从class属性中提取这个“标题”。我知道如何隔离

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

但正则表达式可以让我提取

  

此&lt; em&gt;表达式&lt; / em&gt;描述了这个元素。

如果我可以合并撇号的转义序列,例如

,则可获得奖励积分
caption['This &lt;em style=\'color: #FF0000;\'&gt;expression&lt;/em&gt; describes this element.']

并获取

  

这&lt; em style ='color:#FF0000;'&gt;表达式&lt; / em&gt;描述了这个'元素'。

感谢您的帮助。我真正对正则表达式提出挑战....

3 个答案:

答案 0 :(得分:2)

Class完全是错误的做这样的事情的地方。

这是正确的方法:

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

然后你可以通过jQuery访问它:

$('span').attr('data-caption')

答案 1 :(得分:1)

您可能不应该将此信息放入class属性中(请参阅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);

答案 2 :(得分:1)

我对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没有后视,或者我提供的解决方案只匹配您想要的文本 - 如果您只能获得整个匹配并且无法访问第一个匹配项,则可以使用两个表达式完成基。