2010-09-29 6 views
0

J'ai vu quelques autres questions similaires, mais je n'arrive pas à le faire fonctionner. Ce que j'essaie de faire, c'est de faire correspondre une chaîne de caractères avec des numéros d'édition. J'ai cette partie fonctionne très bien, mais je ne veux pas faire correspondre si elle commence par target='_blank'>.Regex match qui ne commence pas avec quelque chose

Ceux-ci devraient correspondre ...

Issue# 123 
Issue #123 
Issue 123 
Issue no 123 
Issue number 123 
Issue: 123 

Ils ne doivent pas ...

target='_blank'>Issue# 123 
target='_blank'>Issue #123 
target='_blank'>Issue 123 
target='_blank'>Issue no 123 
target='_blank'>Issue number 123 
target='_blank'>Issue: 123 

Ce que j'ai à ce jour est

(?!target='_blank'>)(issue(?: number| no)?[ #:]?[ #]?([0-9]+)) 

Mais il est encore assortissent les ça ne devrait pas.

Toute aide serait géniale.

+1

Apparemment, JS ne supporte pas lookbehinds, sinon ce serait facile. – mpen

+0

Pourquoi ne pas simplement examiner la valeur renvoyée par '.slice (0, 16)'? Si elle est égale à '" target = '_ blank'> "' alors la chaîne globale ne correspond pas. –

+2

Donc, votre analyse HTML avec regex? –

Répondre

0

Merci les gars,

Ce que j'ai fini par avoir à faire est comme suggéré here, et inverser la chaîne et mon regex, et l'utilisation regarder vers l'avenir.

donc ma nouvelle regex est

(([0-9]+)[ #]?[ #:]?(?:rebmun |on)?eussi)(?!>'knalb_'=tegrat) 

boiteux.

0

dissimulons le discours habituel de « ne pas analyser HTML avec des expressions rationnelles », ... si vous utilisez jQuery, vous pouvez faire quelque chose comme

$("a[target!='_blank']").each(function() { 
    if(/yourregex/.match($(this).text()) { 
     // do whatever 
    } 
}); 

Ce probablement « ne compilera pas » mais c'est l'idée générale.

1

Essayez ceci: ^(Issue(?: number| no)?[ #:]?[ #]?([0-9]+)) (non testé)

Si vous essayez d'analyser HTML avec Regex. S'il vous plaît ne pas, à la place .. Utilisez DOM

1

Vous utilisez négative regarder vers l'avant quand vous devriez utiliser négatif regarder derrière.

(?<!target='_blank'>)(issue(?: number| no)?[ #:]?[ #]?([0-9]+)) 

Notez le ?<! au lieu de ?!.

+0

Cela fonctionne, sauf en JavaScript :( –

+0

m'a aidé de toute façon. – nfplee

Questions connexes