Для C # + HtmlAgilityPack вы можете сделать что-то вроде:
InputString = Regex.Replace(InputString,"^(?:[^<]+?|<[^>]*>)*?prefix","");
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(InputString);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[contains('text3')]");
Удаление префикса все еще не является хорошим способом борьбы с ним.В идеале вы должны сделать что-то вроде использования HtmlAgilityPack, чтобы найти, где в DOM находится prefix
, перевести это, чтобы указать положение в строке, а затем выполнить подстроку (pos, len) (или эквивалентную), чтобы посмотреть только соответствующий текст(вы также можете не смотреть на text4 с помощью аналогичного метода).
Боюсь, я не могу перевести все это в код прямо сейчас;надеюсь, кто-то еще может помочь там.
(оригинальный ответ, перед предоставлением дополнительной информации)
Вот решение JavaScript + jQuery :
var InputString = '<div>text0 </div> prefix <div>text1 <strong>text2</strong> text3 </div> text4';
InputString = InputString.replace(/^.*?prefix/,'');
var MatchingDivs = jQuery('div:contains(text3)','<div>'+InputString+'</div>')
console.log(MatchingDivs.get());
Это использует способность jQuery принимать контекст в качестве второго аргумента (хотя, похоже, это нужно заключить в теги div
, чтобы он действительно работал).