В настоящее время у меня есть рабочая функция WordWrap в Javascript, которая использует RegEx. Я передаю строку, которую хочу обернуть, и длину, которую хочу начать обтекание текста, и функция возвращает новую строку с символами новой строки, вставленными в соответствующие места строки, как показано ниже:
wordWrap(string, width) {
let newString = string.replace(
new RegExp(`(?![^\\n]{1,${width}}$)([^\\n]{1,${width}})\\s`, 'g'), '$1\n'
);
return newString;
}
В целях согласованности я не буду вдаваться, мне нужно использовать идентичный или похожий RegEx в C #, но у меня возникают проблемы с успешной репликацией функции. Я прошел через много итераций этого, но вот что у меня есть:
private static string WordWrap(string str, int width)
{
Regex rgx = new Regex("(?![^\\n]{ 1,${" + width + "}}$)([^\\n]{1,${" + width + "}})\\s");
MatchCollection matches = rgx.Matches(str);
string newString = string.Empty;
if (matches.Count > 0)
{
foreach (Match match in matches)
{
newString += match.Value + "\n";
}
}
else
{
newString = "No matches found";
}
return newString;
}
Это неизбежно заканчивается тем, что не находит совпадений независимо от строки и длины, которую я передаю. Я читал, что RegEx, используемый в JavaScript, отличается от стандартной функциональности RegEx в .NET. Я заглянул в PCRE.NET , но мне тоже не повезло.
Я направляюсь в правильном общем направлении с этим? Может кто-нибудь помочь мне преобразовать первый блок кода в JavaScript во что-то умеренно близкое в C #?
edit: Для тех, кто ищет больше ясности в том, что делает рабочая функция и что я ищу для функции C #: я хочу вывести строку, в которую вставлена новая строка (\ n), вставленная на ширину перешел в функцию. Одна вещь, которую я забыл упомянуть (но на самом деле это не связано с моей проблемой), заключается в том, что рабочая версия JavaScript находит конец слова, поэтому слово не сокращается. Так, например, эта строка:
"This string is really really long so we want to use the word wrap function to keep it from running off the page.\n"
... будет преобразован в это с шириной, установленной в 20:
"This string is really \nreally long so we want \nto use the word wrap \nfunction to keep it \nfrom running off the \npage.\n"
Надеюсь, это немного прояснит.