2016-05-27 8 views
0

Ich habe eine Regex, die alle Links in einem HTML-Code entspricht, aber ich möchte nur diejenigen Links übereinstimmen, die ein bestimmtes Muster in seinem Text oder in einem seiner haben Attribute. In der Tat möchte ich nur die Links mit dem Muster ${whatever_text} übereinstimmen.Übereinstimmen Sie alle Links mit einem bestimmten Muster in Javascript

Ich gebe Ihnen ein Beispiel Dinge zu klären:

var text = '<a href="/foo">foo</a> some sample text <a href="${bar}">bar</a>'; 
 
var pattern = /<a (.+?)<\/a>/igm; 
 
var matches = text.match(pattern); 
 
document.write(matches);

Die vorherige Regex entspricht die beiden Links im Text, aber ich brauche einen regulären Ausdruck zu erstellen, die nur die Spiele letzter Link Ich habe mit dem folgenden Regex /<a (.*?\$\{.+?\}.*?)<\/a>/igm versucht, aber es stimmt alles zwischen dem öffnenden Tag des ersten Links und dem schließenden Tag des zweiten Links überein.

var text = '<a href="/foo">foo</a> some sample text <a href="${bar}">bar</a>'; 
 
var pattern = /<a (.*?\$\{.+?\}.*?)<\/a>/igm; 
 
var matches = text.match(pattern); 
 
document.write(matches);

Dank im Voraus!

+0

nicht Regex dafür verwenden. Verwende das DOM. – zzzzBov

+0

Ich denke, ich kann das DOM nicht dafür verwenden, weil der HTML-Code in einem WYSIWYG-Editor in einem Formularfeld ist. Außerdem sehe ich keine einfache Möglichkeit, dies mit dem DOM zu tun. Es wäre schön, wenn Sie mir einige Hinweise oder Beispiele geben könnten;) – beni0888

+0

['(] href =" \ $ {. *?} ". *?>. *? <\/a>)'] (https: // regex101. com/r/oU1pB4/1) – Tushar

Antwort

1

Sie können diese negative Vorschau regex verwenden:

/<a (?:(?!<a[^>]*>).)*?\$\{[^}]+\}.*?<\/a>/ 

RegEx Demo

(?:(?!<a[^>]*>).)*? negativ Look-Ahead wir einen weiteren <a..> nicht übereinstimmen, um sicherzustellen, sobald wir die <a in Anpassung sind einzufügen.

+1

Vielen Dank !!! Genau das habe ich gebraucht – beni0888

Verwandte Themen