【发布时间】: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#