testing new mention regex
This commit is contained in:
parent
c7bf5f79f8
commit
c409a93b18
3 changed files with 29 additions and 19 deletions
|
@ -5,6 +5,6 @@ namespace BirdsiteLive.Common.Regexes
|
||||||
public class UserRegexes
|
public class UserRegexes
|
||||||
{
|
{
|
||||||
public static readonly Regex TwitterAccount = new Regex(@"^[a-zA-Z0-9_]+$");
|
public static readonly Regex TwitterAccount = new Regex(@"^[a-zA-Z0-9_]+$");
|
||||||
public static readonly Regex Mention = new Regex(@"(.)(@[a-zA-Z0-9_]+)(\s|$|[,;:!?/|-]|(. ))");
|
public static readonly Regex Mention = new Regex(@"(.?)@([a-zA-Z0-9_]+)(\s|$|[<,;:!?/|-]|(. ))");
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -21,7 +21,7 @@ namespace BirdsiteLive.Domain.Tools
|
||||||
//private readonly Regex _hastagRegex = new Regex(@"(?<=[\s>]|^)#(\w*[a-zA-Z0-9_ー]+\w*)\b(?!;)");
|
//private readonly Regex _hastagRegex = new Regex(@"(?<=[\s>]|^)#(\w*[a-zA-Z0-9_ー]+\w*)\b(?!;)");
|
||||||
//private readonly Regex _hastagRegex = new Regex(@"(?<=[\s>]|^)#(\w*[a-zA-Z0-9_ー]+)\b(?!;)");
|
//private readonly Regex _hastagRegex = new Regex(@"(?<=[\s>]|^)#(\w*[a-zA-Z0-9_ー]+)\b(?!;)");
|
||||||
|
|
||||||
private readonly Regex _mentionRegex = new Regex(@"\W(\@[a-zA-Z0-9_ー]+\b)(?!;)");
|
//private readonly Regex _mentionRegex = new Regex(@"\W(\@[a-zA-Z0-9_ー]+\b)(?!;)");
|
||||||
//private readonly Regex _mentionRegex = new Regex(@"@\w+");
|
//private readonly Regex _mentionRegex = new Regex(@"@\w+");
|
||||||
//private readonly Regex _mentionRegex = new Regex(@"(?<=[\s>]|^)@(\w*[a-zA-Z0-9_ー]+\w*)\b(?!;)");
|
//private readonly Regex _mentionRegex = new Regex(@"(?<=[\s>]|^)@(\w*[a-zA-Z0-9_ー]+\w*)\b(?!;)");
|
||||||
//private readonly Regex _mentionRegex = new Regex(@"(?<=[\s>]|^)@(\w*[a-zA-Z0-9_ー]+)\b(?!;)");
|
//private readonly Regex _mentionRegex = new Regex(@"(?<=[\s>]|^)@(\w*[a-zA-Z0-9_ー]+)\b(?!;)");
|
||||||
|
@ -110,17 +110,25 @@ namespace BirdsiteLive.Domain.Tools
|
||||||
//messageContent = Regex.Replace(messageContent, m.ToString(),
|
//messageContent = Regex.Replace(messageContent, m.ToString(),
|
||||||
// $@" <a href=""{url}"" class=""mention hashtag"" rel=""tag"">#<span>{tag}</span></a>");
|
// $@" <a href=""{url}"" class=""mention hashtag"" rel=""tag"">#<span>{tag}</span></a>");
|
||||||
|
|
||||||
messageContent = Regex.Replace(messageContent, m.Groups[0].ToString(),
|
messageContent = Regex.Replace(messageContent, Regex.Escape(m.Groups[0].ToString()),
|
||||||
$@"{m.Groups[1]}<a href=""{url}"" class=""mention hashtag"" rel=""tag"">#<span>{tag}</span></a>{m.Groups[3]}");
|
$@"{m.Groups[1]}<a href=""{url}"" class=""mention hashtag"" rel=""tag"">#<span>{tag}</span></a>{m.Groups[3]}");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract Mentions
|
// Extract Mentions
|
||||||
if (extractMentions)
|
if (extractMentions)
|
||||||
{
|
{
|
||||||
var mentionMatch = OrderByLength(_mentionRegex.Matches(messageContent));
|
var mentionMatch = OrderByLength(UserRegexes.Mention.Matches(messageContent));
|
||||||
foreach (Match m in mentionMatch.OrderByDescending(x => x.Length))
|
foreach (Match m in mentionMatch.OrderByDescending(x => x.Length))
|
||||||
{
|
{
|
||||||
var mention = m.ToString().Replace("@", string.Empty).Replace("\n", string.Empty).Trim();
|
var mention = m.Groups[2].ToString();
|
||||||
|
//var mention = m.ToString().Replace("@", string.Empty).Replace("\n", string.Empty).Trim();
|
||||||
|
|
||||||
|
if (!UserRegexes.TwitterAccount.IsMatch(mention))
|
||||||
|
{
|
||||||
|
_logger.LogError("Parsing Mention failed: {Mention} on {Content}", mention, messageContent);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
var url = $"https://{_instanceSettings.Domain}/users/{mention}";
|
var url = $"https://{_instanceSettings.Domain}/users/{mention}";
|
||||||
var name = $"@{mention}@{_instanceSettings.Domain}";
|
var name = $"@{mention}@{_instanceSettings.Domain}";
|
||||||
|
|
||||||
|
@ -131,16 +139,19 @@ namespace BirdsiteLive.Domain.Tools
|
||||||
type = "Mention"
|
type = "Mention"
|
||||||
});
|
});
|
||||||
|
|
||||||
messageContent = Regex.Replace(messageContent, m.ToString(),
|
//messageContent = Regex.Replace(messageContent, m.ToString(),
|
||||||
$@" <span class=""h-card""><a href=""https://{_instanceSettings.Domain}/@{mention}"" class=""u-url mention"">@<span>{mention}</span></a></span>");
|
// $@" <span class=""h-card""><a href=""https://{_instanceSettings.Domain}/@{mention}"" class=""u-url mention"">@<span>{mention}</span></a></span>");
|
||||||
|
|
||||||
|
messageContent = Regex.Replace(messageContent, Regex.Escape(m.Groups[0].ToString()),
|
||||||
|
$@"{m.Groups[1]}<span class=""h-card""><a href=""https://{_instanceSettings.Domain}/@{mention}"" class=""u-url mention"">@<span>{mention}</span></a></span>{m.Groups[3]}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean up return lines
|
//// Clean up return lines
|
||||||
messageContent = Regex.Replace(messageContent, @"<p> ", "<p>");
|
//messageContent = Regex.Replace(messageContent, @"<p> ", "<p>");
|
||||||
messageContent = Regex.Replace(messageContent, @"<br/> ", "<br/>");
|
//messageContent = Regex.Replace(messageContent, @"<br/> ", "<br/>");
|
||||||
messageContent = Regex.Replace(messageContent, @" ", " ");
|
//messageContent = Regex.Replace(messageContent, @" ", " ");
|
||||||
messageContent = Regex.Replace(messageContent, @" ", " ");
|
//messageContent = Regex.Replace(messageContent, @" ", " ");
|
||||||
|
|
||||||
return (messageContent.Trim(), tags.ToArray());
|
return (messageContent.Trim(), tags.ToArray());
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,7 +267,7 @@ namespace BirdsiteLive.Domain.Tests.Tools
|
||||||
public void Extract_SingleMentionTag_Test()
|
public void Extract_SingleMentionTag_Test()
|
||||||
{
|
{
|
||||||
#region Stubs
|
#region Stubs
|
||||||
var message = $"Bla!{Environment.NewLine}@mynickname";
|
var message = $"Bla!{Environment.NewLine}@mynickname";
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Mocks
|
#region Mocks
|
||||||
|
@ -293,7 +293,7 @@ namespace BirdsiteLive.Domain.Tests.Tools
|
||||||
public void Extract_SingleMentionTag_SpecialChar_Test()
|
public void Extract_SingleMentionTag_SpecialChar_Test()
|
||||||
{
|
{
|
||||||
#region Stubs
|
#region Stubs
|
||||||
var message = $"Bla!{Environment.NewLine}@my___nickname";
|
var message = $"Bla!{Environment.NewLine}@my___nickname";
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Mocks
|
#region Mocks
|
||||||
|
@ -391,8 +391,7 @@ namespace BirdsiteLive.Domain.Tests.Tools
|
||||||
Assert.IsTrue(result.content.Contains(@"<a href=""https://domain.name/tags/dada"" class=""mention hashtag"" rel=""tag"">#<span>dada</span></a>"));
|
Assert.IsTrue(result.content.Contains(@"<a href=""https://domain.name/tags/dada"" class=""mention hashtag"" rel=""tag"">#<span>dada</span></a>"));
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void Extract_Emoji_Test()
|
public void Extract_Emoji_Test()
|
||||||
{
|
{
|
||||||
|
@ -412,9 +411,9 @@ namespace BirdsiteLive.Domain.Tests.Tools
|
||||||
logger.VerifyAll();
|
logger.VerifyAll();
|
||||||
Assert.AreEqual(1, result.tags.Length);
|
Assert.AreEqual(1, result.tags.Length);
|
||||||
Assert.IsTrue(result.content.Contains(
|
Assert.IsTrue(result.content.Contains(
|
||||||
@"😤 <span class=""h-card""><a href=""https://domain.name/@mynickname"" class=""u-url mention"">@<span>mynickname</span></a></span>"));
|
@"😤<span class=""h-card""><a href=""https://domain.name/@mynickname"" class=""u-url mention"">@<span>mynickname</span></a></span>"));
|
||||||
|
|
||||||
Assert.IsTrue(result.content.Contains(@"😎 😍 🤗 🤩 😘"));
|
Assert.IsTrue(result.content.Contains(@"😎😍🤗🤩😘"));
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,7 +435,7 @@ namespace BirdsiteLive.Domain.Tests.Tools
|
||||||
#region Validations
|
#region Validations
|
||||||
logger.VerifyAll();
|
logger.VerifyAll();
|
||||||
Assert.AreEqual(1, result.tags.Length);
|
Assert.AreEqual(1, result.tags.Length);
|
||||||
Assert.IsTrue(result.content.Equals(@"bla ( <span class=""h-card""><a href=""https://domain.name/@mynickname"" class=""u-url mention"">@<span>mynickname</span></a></span> test)"));
|
Assert.IsTrue(result.content.Equals(@"bla (<span class=""h-card""><a href=""https://domain.name/@mynickname"" class=""u-url mention"">@<span>mynickname</span></a></span> test)"));
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue