javascript - 正则表达式可以在 JavaScript 中工作,但不能在 C# 中工作

标签 javascript c# .net regex pcre

我目前在 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/

相关文章:

c# - ASP.NET 不断编译

c# - 什么运行我的 C# 应用程序?

c# - MVP 中的接口(interface)和类

c# - 接口(interface)继承差异

c# - 为什么没有更新相当于 WillCascadeOnDelete?

c# - 如何在 C# 中查找打印机类型?

javascript - Typescript 类在其他类中不可见

javascript - 如何在 AngularJS 中将 Controller 放在单独的文件中

javascript - React 组件卸载时如何停止 JavaScript 事件?

javascript - 如何使用vue.js/nuxt.js获取目录下的所有图片文件