我很难过!我用谷歌搜索,阅读和阅读,我确信有一些非常愚蠢,我做错了。这是一个Greasemonkey脚本,我不能在我的生活中启动并正确执行。我想要匹配这个:
<a href="/browse/post/SOMETHING/">**SOMETHING** (1111)</a>
以下是我正在使用的内容:
var titleRegex = new RegExp("<a href=\"/browse/post/\d*/\">(.*) \(");
我确定我错过了某种逃脱角色?但我无法弄明白,以免Firefox出错。
我使用http://regexpal.com/生成正则表达式 - 在Firefox错误控制台中我收到“未终止的括号”
答案 0 :(得分:4)
从字符串而不是正则表达式文字构建正则表达式时,需要加倍反斜杠。
然后,\d*
仅匹配数字。我假设SOMETHING
只是一个占位符,但如果它包含除数字之外的任何内容,则会失败。
此外,您应该使用(.*?)
(懒惰)而不是(.*)
(贪婪),或者您可能匹配太多。也许([^(]*)
会更好。
很难说,在不了解更多关于你想要匹配的实际文本的情况下。
总而言之:
var titleRegex = new RegExp("<a href=\"/browse/post/\\d*/\">([^(]*) \\(");
答案 1 :(得分:2)
一般的想法是获取一串HTML,将其解析为文档(dom elements的树)然后遍历它以提取信息。
如果链接是:
<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) function。
中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());
});
答案 2 :(得分:1)
这是一个简单的解决方法:
/href=\".*?\">(.*?)\(/