javascript - 简单的多行正则表达式在 .NET 中失败,但在 ECMAScript 中成功 - 为什么?

标签 javascript .net regex

我正在用 C# 编写一个快速实用程序,以修改我的所有 Visual Studio C# 项模板以添加额外的 using ; 语句。我编写了一个简单的正则表达式来(黑客地)提取每个文件中当前命名空间导入的集合,以便我可以添加所需的新导入而无需重复。

我正在使用Regex101.com在将正则表达式插入我的 C# 程序之前测试它们,但是当我在 C# 程序中测试它们时,它们不起作用。这让我很困惑,因为正则表达式本身很简单,它使用 .NET 和 ECMAScript 正则表达式通用的正则表达式约定并且即使使用 RegexOptions.ECMAScript 兼容性选项也会失败.

const String input = @"using System;
using System.Foo;

using Foo.Bar;

namespace Foo
{
    using Baz;

    class Qux
    {

    }
}";

Regex regex = new Regex( @"^using ([\w\.]+)\;$", RegexOptions.Multiline | RegexOptions.ECMAScript );

Match match = regex.Match( input );

Assert.IsTrue( match.Success ); // `match.Success` is false when I run this code

我不明白为什么,因为 \w^$ 和多行选项的行为表面上是相同的两个平台。

这是显示它在 Regex101.com 中成功的屏幕截图:

enter image description here

下面的屏幕截图显示它在 .NET 中失败:

enter image description here

最佳答案

这是由于多行模式下的“$”匹配“\n”,而不是默认换行符“\r\n”在 Windows 上。解决方案很简单,在“$”换行符前面添加“\r?”,如下所示:

^using ([\w\.]+);\r?$

现在它将匹配“\n”和“\r\n”。

编辑:

当您在 RegEx101 上输入多行文本时,他们使用“\n”作为换行符,这就是它在他们的网站上运行的原因。

关于javascript - 简单的多行正则表达式在 .NET 中失败,但在 ECMAScript 中成功 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52361025/

相关文章:

C# 无法显示具有正确颜色映射的 RAW16 灰度图像

c# - RegEx 之后用特定文本捕获执行时间

c# - 缺少 IsNullOrEmptyOrWhiteSpace 方法

javascript - 如何将字符串对象的值添加到JS正则表达式中?

regex - 使用gsub删除多个空格和尾部空格

javascript - 登录系统在 Postman 中正常工作,但在浏览器中不正常

Javascript获取所有下拉菜单的值

regex - 使用mongo的原始包进行部分匹配

javascript - 使用 AJAX 将数组传递给 PHP 文件

java - 如何操作java中的类