2013-07-05 218 views
0

我使用这个正则表达式的JavaScript正则表达式的问题

<a [^>]*href[ ]*=[ ]*\"|'[^>]\"|'[^>]*> 

在例如要搜索的字符串唯一的结果的一部分相匹配只匹配

'blablabla') href='www.hello.com' onclick=alert('blablabla') > 

任何想法,问题出在哪里?

+0

'[] *'确实应该'\ s *' – mishik

+0

为什么不简单地'/ /'? – georg

回答

0

|是放错了地方:

<a [^>]*href[ ]*=[ ]*\"|'[^>]\"|'[^>]*>有效的是:

<a [^>]*href[ ]*=[ ]*\"'[^>]\"'[^>]*>

如果你想标记“或”在这个确切的地方使用[]

<a [^>]*href\s*=\s*["'][^>]*["'][^>]*>

例子:

a = "idhasidhioashdoihas <a onclick=alert('blablabla') href='www.hello.com' onclick=alert('blablabla') > asdfsgdufisdugfusdg"; 
a.match(/<a [^>]*href\s*=\s*["'][^>]*["'][^>]*>/) 
["<a onclick=alert('blablabla') href='www.hello.com' onclick=alert('blablabla') >"] 
+0

好的,那就工作了。非常感谢。 只需要在\“ – user2316602

+0

\之前加\ \如果这适合你 - 随时[接受答案] (http://stackoverflow.com/help/someone-answers) – mishik

0

你不正确测试了两种可能的属性值的分隔符。您可以使用此一:

/<a [^>]*href[ ]*=[ ]*[\"']?[^>][\"']?[^>]*>/ 

我只是改变\"|'[\"']?(请注意,它可能不会有行情可言,因此?

0

的字符您使用并不总是合适的课程和你必须由一个组包围你的替换(即:(?:'|")),但你并不需要它。你可以试试这个,用同样的想法:

<a (?:[^h>]+|h(?!ref))*\bhref\s*=\s*["'][^"']*["'][^>]*> 

但是,如果你只想要找到一个链接标签,你可以使用<a.+?>作为thg435表明它。

(需要注意的是href值并不总是引号之间:

<a (?:[^h>]+|h(?!ref))*\bhref\s*=\s*(?:["'][^"']*["']|[^\s>]*)[^>]*> 

(或一定要具有相同的引号)

<a (?:[^h>]+|h(?!ref))*\bhref\s*=\s*(?:(["'])(?:\\\1|[^"']+|(?!\1)["'])*\1|[^\s>]*)[^>]*>