我有一串HTML。里面是"魔术词,"我需要使用C#替换为链接。这是一个字符串替换操作,而不是DOM解析。所以......
This is a magic word.
......需要成为......
This is a <a href="/link.html">magic</a> word.
这是一个相当容易的替换操作,除了如果单词已在输入中链接,我该怎么办。所以,如果这是我的意见:
This is a <a href="/link.html">magic</a> word.
我最终得到了这个:
This is a <a href="/link.html"><a href="/link.html">magic</a></a> word.
通过搜索空格或括号或其他东西,这可能很容易解决,但是这个:
This is a <a href="/link.html">crazy magic stuff</a> word.
字符串&#34;魔术&#34;在中间是自由浮动的,我会得到这个:
This is a <a href="/link.html">crazy <a href="/link.html">magic</a> stuff</a> word
采用这种方法的正确方法是什么?
答案 0 :(得分:0)
我不确定你是如何解析你的字符串或DOM的,但它相当简单。只要您遇到<a
,就会跳过所有内容,直到遇到</a>
,然后继续解析并替换您的单词。您可以这样做,因为您无法在链接中找到链接。
如果我理解正确的话,要将您的文字作为链接,您只需在每个单词后关闭a
标记即可。
答案 1 :(得分:0)
当然这应该从不用于解析HTML,但是如果你需要用String替换方法实现你所描述的内容,那么如下所示呢?
private static string Linkify(string phrase, string word)
{
int wordIndex = phrase.IndexOf(word);
int linkBeginIndex = phrase.IndexOf("<a");
int linkEndIndex = phrase.IndexOf("</a>");
if(linkBeginIndex == -1 || !(wordIndex > linkBeginIndex && wordIndex < linkEndIndex))
{
phrase = phrase.Replace(word, String.Format("<a href='/link.html'>{0}</a>", word));
}
return phrase;
}
这是DotNetFiddle的链接:https://dotnetfiddle.net/2e5Uh2
这不是一个灵活的实现,因为文本可能包含<a
,例如,这不起作用。我们假设这是针对您建议的非常简单的情况。
如果这不是你想要的,请告诉我,我会编辑我的答案。