Javascript regexp问题 - 仅匹配部分结果

时间:2013-07-05 09:02:33

标签: javascript regex match

我正在使用这个正则表达式

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

在示例字符串中搜索:

 idhasidhioashdoihas <a onclick=alert('blablabla') href='www.hello.com'
 onclick=alert('blablabla') > asdfsgdufisdugfusdg

它应匹配

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

但它只匹配

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

知道问题在哪里?

3 个答案:

答案 0 :(得分: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') >"]

答案 1 :(得分:0)

您没有正确测试两个可能的属性值分隔符。你可以使用这个:

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

我刚刚将\"|'更改为[\"']?(请注意,可能根本没有引号,因此?

答案 2 :(得分: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>]*)[^>]*>