【问题标题】:How to convert JavaScript regex to c# regex?如何将 JavaScript 正则表达式转换为 c# 正则表达式?
【发布时间】:2017-03-22 16:03:21
【问题描述】:

假设我们在 Javascript 中有以下正则表达式代码行:

.replace(/[\*\+\-=~><\"\?^\${}\(\)\:\!\/[\]\\\s]/g, '\\$&') // replace single character special characters

.replace(/\|\|/g, '\\||') // replace ||

.replace(/\&\&/g, '\\&&') // replace &&

.replace(/AND/g, '\\A\\N\\D') // replace AND

.replace(/OR/g, '\\O\\R') // replace OR

.replace(/NOT/g, '\\N\\O\\T'); // replace NOT

我正在尝试将这些正则表达式代码行转换为以下 C# 正则表达式:

 public static String ReturnSanitizedString(string query)
    {
        String pattern1 = @"[\*\+\-=~><\""\?^\${ }\(\)\:\!\/[\]\\\s]"; // Replace the single character special characters. 
        String pattern2 = @"\|\|";
        String pattern3 = @"\&\&";
        String pattern4 = @"AND";
        String pattern5 = @"OR";
        String pattern6 = @"NOT";

        String replacement1 = "\\$&";
        String replacement2 = "\\||";
        String replacement3 = "\\&&";
        String replacement4 = "\\A\\N\\D";
        String replacement5 = "\\O\\R";
        String replacement6 = "\\N\\O\\T";

        Regex rgx = new Regex(pattern1);
        string result1 = rgx.Replace(query, replacement1);

        Regex rgx2 = new Regex(pattern2);
        string result2 = rgx2.Replace(result1, replacement2);

        Regex rgx3 = new Regex(pattern3);
        string result3 = rgx3.Replace(result2, replacement3);

        Regex rgx4 = new Regex(pattern4);
        string result4 = rgx4.Replace(result3, replacement4);

        Regex rgx5 = new Regex(pattern5);
        string result5 = rgx5.Replace(result4, replacement5);

        Regex rgx6 = new Regex(pattern6);
        string finalResult = rgx6.Replace(result5, replacement6);

        return finalResult;
    }

以下句子(这是查询):

"AND there! are? (lots of) char*cters 2 ^escape!"

执行上述代码后应该转换成这句话:

\A\N\D\ there\!\ are\?\ \(lots\ of\)\ char\*cters\ 2\ \^escape\!

我无法让这个工作,我在上面的方法中做错了什么。

【问题讨论】:

  • 您不会为每个替换更改 rgx 对象.....也就是您为每个替换使用相同的对象...
  • 是的,没错。我已经改变了它,但我仍然没有得到预期的输出。我不确定我在哪里犯了错误。

标签: javascript c#


【解决方案1】:

pattern3 中,您有正则表达式\&amp;\&amp;|,它基本上匹配所有内容。 只需像这样删除最后一个管道并得到你想要的:

String pattern3 = @"\&\&";

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 1970-01-01
    • 2023-03-09
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多