【发布时间】:2014-03-11 18:45:10
【问题描述】:
我写了一个函数来替换 href 的值与 somevalue + 原始 href 值
说:-
<a href="/somepage.htm" id="test">
替换为
<a href="http//www.stackoverflow.com/somepage.htm" id="test">
不需要更换的地方:-
<a href="http//www.stackoverflow.com/somepage.htm" id="test">
<a href="#" id="test">
<a href="javascript:alert('test');" id="test">
<a href="" id="test">
我编写了以下方法,适用于所有情况,但不适用于 href 的空白值
public static string RelativeToAbsoluteURLS(string text, string absoluteUrl, string pattern = "src|href")
{
if (String.IsNullOrEmpty(text))
{
return text;
}
String value = Regex.Replace(text, "<(.*?)(" + pattern + ")=\"(?!http|javascript|#)(.*?)\"(.*?)>", "<$1$2=\"" + absoluteUrl + "$3\"$4>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
return value.Replace(absoluteUrl + "/", absoluteUrl);
}
写?!http|javascript|# 忽略http, javascript, #,所以它适用于这些情况,但如果我们考虑以下部分
(?!http|javascript|#)(.*?)
并将此 * 替换为 +
(?!http|javascript|#)(.+?)
它不适用于空箱。
【问题讨论】:
-
问题足够大,我需要它来处理
<a href="" id="test">case -
感谢您的评论,我已经编写了一个单独的HTML解析类,该方法是实用程序类的一部分,它具有针对某些特殊场景的某些方法,该函数就是其中之一。跨度>
-
这里我不希望这种方法适用于标签,唯一的期望是它应该适用于
""而且我也不希望它适用于所有情况[作为正则表达式不是最好的方法],至少对于我想要的人来说