我目前在 Javascript 中有一个使用 RegEx 的有效 WordWrap 函数。我传递了要换行的字符串以及要开始换行文本的长度,该函数返回一个新字符串,并在字符串中的适当位置插入了换行符,如下所示:
wordWrap(string, width) {
let newString = string.replace(
new RegExp(`(?![^\\n]{1,${width}}$)([^\\n]{1,${width}})\\s`, 'g'), '$1\n'
);
return newString;
}
出于一致性目的,我不会深入讨论,我需要在 C# 中使用相同或类似的 RegEx,但我在成功复制该函数时遇到了麻烦。我已经经历过很多次迭代,但这就是我目前所拥有的:
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;
}
无论我传递的字符串和长度如何,这都不可避免地会找不到匹配项。我了解到 JavaScript 中使用的 RegEx 与 .NET 中的标准 RegEx 功能不同。我调查了PCRE.NET但也没有运气。
我的总体方向正确吗?谁能帮我将 JavaScript 中的第一个代码块转换为 C# 中相当接近的代码块?
编辑:对于那些希望更清楚地了解工作函数的作用以及我正在寻找 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"
希望能澄清一点。
最佳答案
JavaScript 和 C# 正则表达式引擎是不同的。此外,每种语言都有自己的正则表达式模式执行器,因此正则表达式依赖于语言。事实并非如此,如果它适用于一种语言,那么它也适用于另一种语言。
C# 支持命名组,而 JavaScript 不支持。
因此您可以找到这两种语言正则表达式之间的多个差异。
关于javascript - 正则表达式可以在 JavaScript 中工作,但不能在 C# 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56531523/