我正在使用这个正则表达式
<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') >
知道问题在哪里?
答案 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>]*)[^>]*>