gpt4 book ai didi

javascript - 为什么取消转义字符串会弄乱我的正则表达式?

转载 作者:行者123 更新时间:2023-11-29 18:30:31 26 4
gpt4 key购买 nike

我正在尝试生成与此类似的 javascript 代码

function ParseJsonDate(input) {
var tmp = +input.replace(/\/Date\((-?\d+)\)\//, '$1');
jsonDate = new Date(tmp);

return jsonDate;
}

在 Script# 中我写了这个:

    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 对象完全不同。

有什么想法吗?

最佳答案

/\/Date\((-?\d+)\)\// 中,开头和结尾的 / 不是正则表达式的一部分,它们' re 正则表达式文字的分隔符。它们告诉 JavaScript 解释器正则表达式的开始和结束位置,就像引号分隔字符串文字一样。

在 Script# 代码中,您正在以字符串文字而非正则表达式文字的形式创建正则表达式。编译器认为前导和尾随 / 是为了匹配文字斜杠。有了这些,就不需要在正则表达式中转义文字斜杠了。剩下的就是:

@"/Date\((-?\d+)\)/"

具有讽刺意味的是,此正则表达式匹配以 / 开头和结尾的字符串。那是你的意图,不是吗?

关于javascript - 为什么取消转义字符串会弄乱我的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com