48 lines
1.3 KiB
C#
48 lines
1.3 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace SPTarkov.Common.Extensions;
|
|
|
|
public static class StringExtensions
|
|
{
|
|
private static readonly Dictionary<string, Regex> _regexCache = new();
|
|
private static readonly Lock _regexCacheLock = new();
|
|
|
|
public static string RegexReplace(this string source, [StringSyntax(StringSyntaxAttribute.Regex)] string regexString, string newValue)
|
|
{
|
|
Regex regex;
|
|
lock (_regexCacheLock)
|
|
{
|
|
if (!_regexCache.TryGetValue(regexString, out regex))
|
|
{
|
|
regex = new Regex(regexString);
|
|
_regexCache[regexString] = regex;
|
|
}
|
|
}
|
|
|
|
return regex.Replace(source, newValue);
|
|
}
|
|
|
|
public static bool RegexMatch(this string source, [StringSyntax(StringSyntaxAttribute.Regex)] string regexString, out Match? matchedString)
|
|
{
|
|
Regex regex;
|
|
lock (_regexCacheLock)
|
|
{
|
|
if (!_regexCache.TryGetValue(regexString, out regex))
|
|
{
|
|
regex = new Regex(regexString);
|
|
_regexCache[regexString] = regex;
|
|
}
|
|
}
|
|
|
|
matchedString = null;
|
|
if (!regex.IsMatch(source))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
matchedString = regex.Match(source);
|
|
return true;
|
|
}
|
|
}
|