gpt4 book ai didi

JavaScript 正则表达式在 IE/Firefox 中失败

转载 作者:行者123 更新时间:2023-12-01 05:21:06 24 4
gpt4 key购买 nike

我遇到了正则表达式匹配无法在 Internet Explorer 和 Firefox 中进行计算的问题。它在 Chrome 和 Opera 中运行良好。我知道 Chrome 通常对错误的容忍度要高得多,所以我怀疑我在这个过程中犯了一些错误——但所有在线评估工具似乎都没有发现我的表达中有任何错误。我很抱歉,这是一个如此复杂的表达,但希望罪魁祸首能够很容易被发现。表达式如下:

keyData = data.match(/\w+\u0009\w+\u0009[\u0009]?\w+\u0009([-]?\w+|%%)[@]?\u0009([-]?\w+|%%)[@]?\u0009([-]?\w+|%%)[@]?(\u0009([-]?\w+|%%)[@]?)?(\u0009([-]?\w+|%%)[@]?)?(\u0009([-]?\w+|%%)[@]?)?\u0009\u0009\/\//g);

“data”是一个文本文件,我正在解析它,没有错误。我不会在这里发布整个文件,但我希望匹配的是如下内容:

10  Q       1   0439    0419    -1      // CYRILLIC SMALL LETTER SHORT I, CYRILLIC CAPITAL LETTER SHORT I, <none>

我相信,当我在此处发布字符串时,它会删除“u0009”字符,因此如果您想查看完整文件之一,我已链接了一个 here 。如果还有什么我可以澄清的,请告诉我!

编辑:
我在这篇文章中的目标不仅是理解为什么会失败,而且还要理解这个表达式的格式是否正确。

经过进一步检查,似乎是Internet Explorer和Firefox如何解析文本文件的问题。他们似乎去掉了制表符并用空格代替。我尝试更新表达式,它在在线验证器中匹配没有问题,但在 IE/FF 中仍然失败。

编辑2
此后,我考虑到反馈,将我的表达方式更新为更清晰的形式。该问题在 IE 和 Firefox 中仍然存在。看来是字符串本身的问题。 IE 不会让我匹配多个字符,无论我的表达是什么。例如,如果文件的字符串是KEYBOARD,我尝试与/\w+/匹配,它只会返回K

/[0-9](\w)?(\t+|\s+)\w+(\t+|\s+)[0-9](\t+|\s+)(-1|\w+@?|%%)(\t+|\s+)(-1|\w+@?|%%)(\t+|\s+)(-1|\w+@?|%%)((\t+|\s+)(-1|\w+@?|%%))?((\t+|\s+)(-1|\w+@?|%%))?((\t+|\s+)(-1|\w+@?|%%))?(\t+|\s+)\/\//g

最佳答案

在研究了我的正则表达式一段时间后,我怀疑 IE 实际读取文本文件的方式与 Chrome 相比有问题。具体来说,如果我在文本文件中有字符串 KEYBOARD 并且尝试使用 /\w+/ 来匹配它,它只会返回 K在 IE 中,但在 Chrome 中,它将匹配整个字符串 KEYBOARD。我怀疑 IE 在字符之间插入了一些死空间,因此我单步执行文件的前几个字符并打印了它们的 unicode 等效项。

for (i = 0; i < 30; i++) {
console.log(data.charCodeAt(i) + ' ' + data[i]);
}

这证实了我的怀疑,我看到每个字符之间都弹出了 u0000。我不确定为什么每个字符之间有 NULL 字符,但为了解决我的问题,我简单地执行了: 数据 = data.replace(/\u0000+/g, '');这完全解决了我的问题,我能够使用表达式像平常一样解析我的字符串:

keyData = data.match(/[0-9](\w)?(\t+|\s+)\w+(\t+|\s+)[0-9](\t+|\s+)(-1|\w+@?|%%)(\t+|\s+)(-1|\w+@?|%%)(\t+|\s+)(-1|\w+@?|%%)((\t+|\s+)(-1|\w+@?|%%))?((\t+|\s+)(-1|\w+@?|%%))?((\t+|\s+)(-1|\w+@?|%%))?(\t+|\s+)\/\//g);

关于JavaScript 正则表达式在 IE/Firefox 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43703026/

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