1

谁能帮我把它变成一个常规表达?

<a onclick="NavigateChat();" style="cursor:pointer;"><img src="images/online-chat.jpg" width="350" height="150" border="0" alt="Title Loans Novato - Online Chat"/></a>

alt 标签会改变,图像也会改变,但 <a onclick="NavigateChat();" style="cursor:pointer;"> 总是开始字符串, </a> 总是结束它。我如何使用正则表达式来找到它?

4

2 回答 2

1

描述

我不太确定您要返回什么,所以这个通用正则表达式将:

  • 找到锚标签
  • 要求锚标记具有属性 onclick="navigatechat();"
  • 要求锚标记具有属性 style="cursor:pointer;"
  • 允许以任意顺序匹配属性
  • 要求锚标签的内部文本只是一个图像标签
  • 完整捕获锚标记的内部文本标记
  • 避免许多使 html 中的模式匹配变得困难的边缘情况

<a(?=\s|>)(?=(?:[^>=|&)]*|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sonclick="NavigateChat\(\);")(?=(?:[^>=|&)]*|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sstyle="cursor:pointer;")(?:[^>=|&)]|='(?:[^']|\\')*'|="(?:[^"]|\\")*"|=[^'"][^\s>]*)*>\s*(<img\s.*?)\s*<\/a>

在此处输入图像描述

例子

现场演示

示例文本

<a onmouseover=' a=1; onclick="NavigateChat();" style="cursor:pointer;"  href="www.NotYourURL.com" ; if (3 <a && href="www.NotYourURL.com" && id="revSAR" && 6 > 3) { funRotate(href) ; } ; '  href='http://InterestedURL.com' id='revSAR'><img src="YouShouldn'tFindMe.nope"></a>

<a onclick="NavigateChat();" style="cursor:pointer;"><img src="images/online-chat.jpg" width="350" height="150" border="0" alt="Title Loans Novato - Online Chat"/></a>

火柴

第 0 组获取整个匹配的锚标记
第 1 组获取内部文本

[0][0] = <a onclick="NavigateChat();" style="cursor:pointer;"><img src="images/online-chat.jpg" width="350" height="150" border="0" alt="Title Loans Novato - Online Chat"/></a>
[0][1] = <img src="images/online-chat.jpg" width="350" height="150" border="0" alt="Title Loans Novato - Online Chat"/>
于 2013-08-21T01:23:12.727 回答
0

您需要提取/捕获某些信息还是只查找整个字符串?我推广正则表达式的常用方法是从文字文本开始,然后用一般占位符替换元素......

<a onclick="NavigateChat\(\);" style="cursor:pointer;"><img src="[^"]+" width="\d+" height="\d+" border="\d+"  alt="[^"]+"/></a>

此表达式使用[^"]代表“非引号”的字符集。如果您只是.*用作通配符,那么如果文档中存在多个标签,您的正则表达式将失败。正则表达式是“贪婪的”并且会尝试选择从第一个标签到最后一个链接末尾的所有文本。

如果没有数据样本,我无法确定地对此进行测试,但它应该很接近。

于 2013-08-20T22:31:17.357 回答