Question

Je travaille sur ce RegEx depuis environ un jour et je pense que cela a fonctionné pour qu'il renvoie les données que je souhaite. D'abord un petit fond.

J'ai un éditeur de contenu que les utilisateurs pourront éditer des pages Web. Ils peuvent formater du texte, ajouter des liens, etc. Quand ils cliquent sur sauvegarder, l'éditeur permet de récupérer le contenu (editor.Content) et de le placer dans une chaîne. Ce que je veux, c’est d’obtenir des liens (<a> balises) et de savoir s’il s’agit de liens internes ou externes et de fichiers PDF.

Voici l'expression que j'ai créée:

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

Grâce à cela, je suis en mesure de séparer le domaine (s'il en a un) et le chemin d'accès. Ensuite, je passe en revue les matchs ...

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

Ma question est la suivante ... les parties dans lesquelles je "fais des choses" sur les valeurs, quel serait le meilleur moyen de remettre cela dans ma chaîne "editorContent"? Je pourrais probablement mettre le editorContent dans un StringBuilder et faire tout un tas de remplacements dessus, mais est-ce très efficace?

Ainsi, par exemple, avec le fichier PDF, je veux spécifier qu’il s’ouvre dans une nouvelle fenêtre (target = " _blank ")) et pour l’URL externe, ajouter du code javascript dans le fichier. attribut onclick.

Toutes les idées seraient géniales!

Merci!

Était-ce utile?

La solution

Je pense que vous souhaitez effectuer un Regex.Replace et passer dans un MatchEvaluator. Fondamentalement, le <=> est un délégué à une fonction qui renvoie une chaîne de remplacement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top