0

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

<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') >

知道问题出在哪里吗?

4

3 回答 3

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>]*)[^>]*>
于 2013-07-05T09:14:11.513 回答
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') >"]
于 2013-07-05T09:05:49.940 回答
0

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

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

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

于 2013-07-05T09:05:50.177 回答