2013-07-05 3 views
0

J'utilise cette regexJavascript regexp question - correspond à une partie seulement du résultat

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

à la recherche dans l'exemple chaîne:

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

Il doit correspondre

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

mais seulement les correspondances

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

Une idée où est le problème?

+0

'[] *' devrait vraiment être '\ s * ' – mishik

+0

pourquoi pas simplement'//'? – georg

Répondre

0

Votre | est au mauvais endroit:

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

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

Si vous voulez marquer "ou" dans cette utilisation exacte place []:

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

Exemple:

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

OK, cela a fonctionné.Merci beaucoup Juste besoin d'ajouter \ avant de" – user2316602

+0

Vous êtes les bienvenus.Si cela vous convient - n'hésitez pas à [accepter la réponse] (http://stackoverflow.com/help/someone-answers) – mishik

0

Vous ne testez pas correctement pour les deux délimiteurs de valeur d'attribut possibles. Vous pouvez utiliser celui-ci:

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

Je viens de changer \"|'-[\"']? (notez qu'il est possible de ne pas avoir des citations du tout, d'où les ?)

0

Les classes de caractères que vous utilisez ne sont pas toujours appropriés et vous doit entourer votre alternance par un groupe (par exemple: (?:'|")), mais vous n'en avez pas besoin. Vous pouvez essayer, avec la même idée:

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

Mais si vous voulez seulement trouver une balise de lien, vous pouvez utiliser <a.+?> comme thg435 suggère.

(Notez que la valeur href est pas toujours entre guillemets:

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

(ou pour être sûr d'avoir les mêmes citations)

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