用于获取链接文本的正则表达式

Regular expression to get link text

本文关键字:正则表达式 文本 链接 获取 用于      更新时间:2023-09-26

我被难住了!我在谷歌上搜索过,读过,读过,读过,读过,我确信有一些真的很蠢我做错了。这是从一个油膏猴脚本,我不能为我的生活得到启动和执行正确。我正在尝试匹配这个:

<a href="/browse/post/SOMETHING/">**SOMETHING** (1111)</a>

我用的是:

var titleRegex = new RegExp("<a href='"/browse/post/'d*/'">(.*) '(");

我确定我遗漏了一些转义字符?但是我就是不能弄清楚,这样Firefox就不会出错了。

我使用http://regexpal.com/生成regexp——在Firefox错误控制台中,我收到"unterminated parentheses"

当从字符串而不是正则表达式文本构建正则表达式时,需要双反斜杠。

'd*只匹配数字。我假设SOMETHING只是一个占位符,但如果它包含除数字以外的任何内容,它将失败。

另外,您应该使用(.*?)(惰性)而不是(.*)(贪婪),否则您可能匹配太多。也许([^(]*)会更好。

在不了解要匹配的实际文本的情况下,很难说。

All in All:

var titleRegex = new RegExp("<a href='"/browse/post/''d*/'">([^(]*) ''(");

这里有一个简单的修复:

/href='".*?'">(.*?)'(/

一般思路是获取一个HTML字符串,将其解析为文档(dom元素树),然后遍历它以提取信息。

如果链接是:

<a href="/browse/post/something/"><b>something</b> else</a>

首先遍历树查找锚标记,然后:

anchor.textContent // returns "something else"

从元素中提取文本很简单,即使下面的树中有其他元素也包含文本。这也比正则表达式示例更健壮。假设有人向锚添加了一个类属性,那么接受的答案中的正则表达式将不再与锚标记匹配。但是基于遍历的解决方案仍然有效。

在简单的情况下,您可以创建一个div,然后将innerHTML设置为HTML字符串,然后遍历它:

var html = '<p><a href="/browse/post/">Lorem</p> <p>Ipsum</p></a>';
var div = document.createElement("div");
div.innerHTML = html;
var anchors = div.getElementsByTagName("a");
for (var i = 0; i < anchors.length; i++) {
    console.log(anchors[i].textContent);
}

一个更复杂的版本被封装在jQuery(string)函数中。

var html = '<div><p><a href="/browse/post/">Lorem</p> <p>Ipsum</p></a></div>';
jQuery(html).find("a").each(function() {
    console.log(jQuery(this).text());
});

实例:http://jsfiddle.net/ygcFM/