【问题标题】:IE11 Regular Expression Unexpected ResultIE11 正则表达式意外结果
【发布时间】:2018-09-14 16:45:58
【问题描述】:

我有这个正则表达式/(\d\d|\d).(\d\d|\d)/,我在06/16/2018 上执行它作为输入字符串。在 Chrome 中,它按预期工作,将["06/16", "06", "16"] 作为匹配结果。在 IE11 中,它给了我["2018", "20", "8"] 作为结果。但是,当我尝试直接在控制台中重新创建它时,它在两种浏览器中都可以正常工作。知道这里会发生什么吗?

作为背景,这实际上是在第三方库 flatpickr v4.5.0 中执行的,但我正在调试该代码以查看发生了什么。

有关示例,请参见下面的 IE11 调试器屏幕截图。我不知道这是怎么发生的。

这对我来说没有任何意义,(\d\d|\d).(\d\d|\d) 怎么能匹配 06/16/2018 作为 2018 而不是 06/16。另外,查看matchindex 属性。 11?这怎么可能呢?输入字符串的长度只有10。

这是一个指向 code sandbox 的链接,其中演示了这一点。

【问题讨论】:

  • 请添加一个minimal reproducible example来显示实际问题
  • 这听起来像同一个 RegExp 对象在同一个字符串上被 executed 两次
  • @Thomas 据我所知,RegExp 是在每次execed 时创建的,所以我认为这不是问题。

标签: javascript internet-explorer internet-explorer-11 flatpickr


【解决方案1】:

我最终解决了这个问题,所以我想在这里为将来发现此问题的任何人跟进。

正如您在我上面发布的代码沙箱链接中看到的那样,我使用Date.toLocaleDateString 获取格式化的日期字符串。显然,在 IE11(和 Edge)中,包含一些额外的从左到右字符,这会导致格式化日期值的解析失败。一旦我摆脱了这些字符,这个问题就解决了。

作为参考,这里是我打开的 GitHub 问题来跟踪这个问题:https://github.com/IBM/carbon-components-react/issues/1325

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    相关资源
    最近更新 更多