Domanda

Ho lavorato su questo RegEx per circa un giorno e credo di averlo fatto in modo che restituisca i dati desiderati. Prima un po 'di storia.

Ho un editor di contenuti che gli utenti saranno in grado di modificare le pagine web. Possono formattare testo, aggiungere collegamenti, ecc. Roba standard per l'editor di contenuti. Quando fanno clic su Salva, l'editor fornisce la possibilità di ottenere il contenuto (editor.Content) e inserirlo in una stringa. Quello che voglio fare è ottenere qualsiasi collegamento (<a> tag) e scoprire se si tratta di collegamenti interni o esterni e se sono file PDF.

Ecco l'espressione che mi è venuta in mente:

<a\b[^<>]*href\s*=\s*[\""\'](?<domain>https?:\/\/[^\/\s\'\""]*)*\/?(?<path>\/?[^\s\""]+?)?[[>\""\']

Con questo, sono in grado di separare il dominio (se ne ha uno) e il percorso. Quindi, cerco le partite ...

dim matchColl as MatchCollection = Regex.Matches(editorContent, regExString)
For Each m as Match in matchColl
   If m.Groups("domain").value <> myInternalDomain and m.Groups("domain").value <> "" then
       'this is an external domain... do some stuff
   End If
   If m.Groups("path").value.EndsWith(".pdf") then
         'it is a pdf, do some other stuff...
   End if
Next

La mia domanda è questa ... le parti in cui 'faccio alcune cose' ai valori, quale sarebbe il modo migliore per riportarlo nella mia stringa 'editorContent'? Potrei probabilmente mettere l'editorContent in uno StringBuilder e fare un sacco di rimpiazzi su di esso, ma è molto efficace?

Quindi, ad esempio, con il PDF, voglio specificare che si apre in una nuova finestra (target = " _blank ") e per l'URL esterno, aggiungi del codice javascript nel attributo onclick.

Qualsiasi idea sarebbe fantastica!

Grazie!

È stato utile?

Soluzione

Penso che tu voglia fare un Regex.Replace e passare tra MatchEvaluator. Fondamentalmente <=> è un delegato a una funzione che restituisce una stringa di sostituzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top