/// <summary> /// 下划线解析器 /// </summary> /// <param name="str">原字符串</param> /// <returns></returns> public string ParsingUnderLineEx(string content) { m_UnderLineInfos.Clear(); string str = content; string combineText = string.Empty; while (RichTextConst.UnderLineRegex.IsMatch(str)) { Match match = RichTextConst.UnderLineRegex.Match(str); //前半截 combineText = str.Substring(0, match.Index - 0); //下划线的内容 string tempStr = match.Groups[1].Value; Debug.LogError(str); int fitterLen = 0; foreach (Match matchFitter in RichTextConst.FitterRegex.Matches(tempStr)) { if (matchFitter.Value.Contains("link")) { fitterLen += matchFitter.Length * 4; } } var _underLineInfo = new UnderLineInfo { startIndex = combineText.Length * 4, // 超链接里的文本起始顶点索引 endIndex = (tempStr.Length + combineText.Length) * 4 //- fitterLen, //终点索引 }; m_UnderLineInfos.Add(_underLineInfo); //拼接内容 combineText += tempStr; int index = match.Index + match.Length; str = combineText + str.Substring(index, str.Length - index); combineText = string.Empty; } return(str);; }
/// <summary> /// 下划线解析器 /// </summary> /// <param name="str">原字符串</param> /// <returns></returns> public string ParsingUnderLine(string content) { m_UnderLineInfos.Clear(); //取出下划线位置 foreach (Match match in RichTextConst.UnderLineRegex.Matches(content)) { //计算嵌套剔除的内容 string temp = match.Value; string combineText = string.Empty; int cor = match.Index; while (temp.Contains("\n")) { int length = temp.IndexOf("\n"); combineText = temp.Substring(0, length); var _underLineInfo = new UnderLineInfo { startIndex = cor * 4, // 超链接里的文本起始顶点索引 endIndex = (combineText.Length + cor) * 4, //终点索引 }; m_UnderLineInfos.Add(_underLineInfo); length += 1; cor += length; temp = temp.Substring(length, temp.Length - length); } //信息 var underLineInfo = new UnderLineInfo { startIndex = cor * 4, // 超链接里的文本起始顶点索引 endIndex = (temp.Length + cor) * 4, //终点索引 }; m_UnderLineInfos.Add(underLineInfo); } return(content); }