我正在尝试使用GeckoFX webbrowser控件实现一个简单的'find on page'引擎(因为我对'window.find()'不满意,并且无法使其他任何工作。
我们的想法是将“<span style=\"background-color: gold;\">
搜索文本</span>
”格式添加到包含搜索字符串的单元格或段落的innerhtml元素中。
当我在cell.InnerText中查找匹配项时,如果找到匹配项,我想替换cell.InnerHtml。如果cell.InnerHtml包含标签内的搜索字符串,这些将被搞砸。
也许代码会更好地解释:这是我的输入字符串
<span><a href=\"/some random link containing text\">test search text that should be found</a></span>
代码:
string goldSpanStyle = "<span style=\"background-color: gold;\">";
string textToFind = "text";
if (cell.TextContent.IndexOf(textToFind , comp) >= 0)
{
match = cell.TextContent.Substring(cell.TextContent.IndexOf(textToFind , stringComparisonOrdinalIgnoreCase), textToFind.Length);
}
if (match != "")
{
cell.InnerHtml = Regex.Replace(cellHtml, textToFind, goldSpanStyle + match + "</span>", RegexOptions.IgnoreCase);
}
现在在这种情况下,我们会搞乱html,因为span格式也会添加到href属性中
<span><a href=\"/some random link containing <span style=\"background-color: gold;\">text</span>\">test search <span style=\"background-color: gold;\">text</span> that should be found</a></span>
我需要一个只能匹配不在标签内的文本的正则表达式...我试过这个
(?!(<[^>]+>))(text)(?=<\/[^>]+>)
但结果并不好,因为它只会匹配搜索字符串的最后一个字母恰好在结束标记之前(在这种情况下为'd')
(?!(<[^>]+>))test search text that should be found(?=<\/[^>]+>)
提前感谢您的帮助和建议 的Bartosz
=== 编辑:
基本上,我认为在像<a href="www.match.com">match</a>
这样的示例字符串中,我只需要匹配第二个“匹配”字,而不是<a href="www.match.com">
中的字匹配...