JavaScript RegEx在IE / Firefox中失败

时间:2017-04-30 04:52:04

标签: javascript jquery regex

我遇到了在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);

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

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

我相信当我在这里发布字符串时,它会移除&#39; u0009&#39;因此,如果您想查看其中一个完整文件,我已将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

1 个答案:

答案 0 :(得分:0)

在使用我的正则表达式一段时间之后,我怀疑IE浏览文本文件的方式与Chrome相比有些问题。具体来说,如果我在文本文件中包含字符串KEYBOARD,并且我尝试使用/\w+/匹配它,那么它只会在IE中返回K但在Chrome中会匹配整个字符串{ {1}}。我怀疑IE在字符之间插入了一些死空间,所以我逐步浏览了文件的前几个字符并打印了它们的unicode等效字符。

KEYBOARD

这证实了我的怀疑,我看到每个角色之间都出现了for (i = 0; i < 30; i++) { console.log(data.charCodeAt(i) + ' ' + data[i]); } 。我不确定为什么每个字符之间都有NULL字符,但为了解决我的问题我只是执行:     data = data.replace(/ \ u0000 + / g,&#39;&#39;); 这完全解决了我的问题,我能够像使用表达式一样解析我的字符串:

u0000