我正在尝试生成类似于此
的javascript代码function ParseJsonDate(input) {
var tmp = +input.replace(/\/Date\((-?\d+)\)\//, '$1');
jsonDate = new Date(tmp);
return jsonDate;
}
在剧本#中我写了这个:
public static Date ParseJsonDate(string input)
{
string pattern = @"/\/Date\((-?\d+)\)\//".Unescape();
RegularExpression regex = new RegularExpression(pattern);
string tmp = input.ReplaceRegex(regex, "$1");
Number milliseconds = Number.Parse(tmp);
Date jsonDate = new Date(milliseconds);
return jsonDate;
}
编译到这个:
StringFunctions.parseJsonDate = function StringFunctions$parseJsonDate(input) {
/// <param name="input" type="String">
/// </param>
/// <returns type="Date"></returns>
var pattern = unescape('/\\/Date\\((-?\\d+)\\)\\//');
var regex = new RegExp(pattern);
var tmp = input.replace(regex, '$1');
var milliseconds = Number.parse(tmp);
var jsonDate = new Date(milliseconds);
return jsonDate;
}
这看起来很好但是当我使用调试器逐步执行它时,从非转义字符串构造的RegExp对象完全不同。
有什么想法吗?
答案 0 :(得分:2)
从字符串构建正则表达式时,不需要前导和尾随/
字符。事实上,你不仅需要它们,你不想要它们,因为正则表达式解析器假定你希望它匹配一个前导和尾随{{ 1}}围绕着模式。
答案 1 :(得分:2)
在/\/Date\((-?\d+)\)\//
中,前导和尾随/
不是正则表达式的一部分,它们是正则表达式文字的分隔符。它们告诉JavaScript解释器正则表达式的开始和结束位置,就像引号分隔字符串文字一样。
在脚本#代码中,您以字符串文字的形式创建正则表达式,而不是正则表达式文字。编译器认为前导和尾随/
旨在匹配文字斜杠。随着那些消失,不应该在正则表达式中逃避字面斜线。这让你:
@"/Date\((-?\d+)\)/"
具有讽刺意味的是,此正则表达式匹配以/
开头和结尾的字符串。这是你的意图,不是吗?