2011-07-18 141 views
0

我想匹配一些来自网页内容的链接。我知道我可以使用file_get_contents(url)在php中执行此操作。如何在JavaScript? 对于正则表达式,像javascript正则表达式

<a href="someurl/something" id="someid">contents</a> 

我如何用js正则表达式匹配这个(比赛只有一次,不要贪婪)。我尝试使用这个

/^\<a href=\"someurl\/something\" id=\"someid\"\>(+?)\<\/a\>$/ 

但它不起作用。 有人可以帮忙吗? 谢谢!

+3

你不想为此使用正则表达式。顺便说一句,你的错误是一个缺失的点:'(。+?)'而不是'(+?)'使正则表达式至少在语法上是有效的。 (你不需要除斜杠之外的所有反斜杠) –

回答

0

DOM和jQuery的建议是更好的,但如果你仍然想使用正则表达式,然后试试这个:

/^<a href=".*?" id=".*?">(.*?)<\/a>$/ 
+0

不需要eacape?像\“,\\ < – nich

+1

除了”/“字符外,不需要转义。查看演示[here](http://jsfiddle.net/GcB8k/)。 –

4

您应该知道,使用正则表达式解析HTML并不是解决此问题的最佳方式,并且如果您有权访问该页面的实时DOM,则应该使用DOM方法。如在,你应该使用

document.getElementById('someid').innerHTML // this will return 'contents' 

而不是一个正则表达式。

3

我强烈推荐使用类似jQuery的库来获取元素,然后通过.text()调用获取内容。它比试图用正则表达式解析HTML更加简单可靠。

+2

为什么选jQuery?我总是看到jQuery被推荐用于最简单的事情,甚至没有任何浏览器怪癖,缺乏优雅或任何需要它的东西。就个人而言,我只是使用本机DOM API。 –

+0

@Delan Azabani - 如果这个特殊的例子是所有*正在完成,是的,DOM工作正常。但通常这样的事情并不是孤立地进行的,说实话,jQuery只是*好*而已。 – Amber

0

你还不如创建与jQuery

var elements = $(html); 
var links = elements.find('a'); 
links.each(function(i, link){ 
    //Do the regexp matching in here if you wish to search for specific urls only 
}); 

要素在更大的文件,使用DOM比将整个事物转换为文本更快捷。

0

试试这个〜

try { 
    boolean foundMatch = subjectString.matches("(?im)<a[^>]*href=(\"[^\"]*\"|'[^']*'|[^\\s>]*)[^>]*>.*?</a>"); 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} 

比赛双引号,单引号和空。

<a href="someurl/something" id="someid">contents</a> 
<a href='someurl/something' id='someid'>contents</a> 
<a href=someurl/something id=someid>contents</a>