gpt4 book ai didi

Javascript 正则表达式问号跨浏览器行为

转载 作者:行者123 更新时间:2023-12-02 19:52:41 28 4
gpt4 key购买 nike

今天我在摆弄 Javascript 正则表达式并发现了这个:

//Suppose
var one = 'HELLOxBYE';
var two = 'HELLOBYE';

您可以创建一个正则表达式来尝试通过以下两种方式捕获“x”:

/^HELLO(x?)BYE$/ //(A)

//or

/^HELLO(x)?BYE$/ //(B)

我发现当你在 var 2 上使用 (A) 时,正则表达式返回一个空字符串 '';而当您使用 (B) 时,正则表达式返回 null。

你必须小心。

有谁知道这是否是跨浏览器行为?

我已在 Google Chrome (Webkit) 版本 15 上对此进行了测试。

更新:哇哦,刚刚在 Internet Explorer 8 上做了一些测试,这两种情况都返回一个空字符串 ''。所以我的结论是,最好的选择是使用 (A),然后测试空字符串。

最佳答案

从技术上讲,(A) 应该在 HELLOBYE 上返回 '',因为捕获括号可以捕获“x”和空字符串,因为 ? 位于捕获组内部

而在 (B) 中,捕获括号只能捕获字符串x。如果 x 不存在,则该组根本不会被捕获,因为整个组是可选的,与正则表达式 < em>在组内。

细微差别!

因此,浏览器或正则表达式引擎总是为 (A) 返回 '',但为 (B) 返回的内容并没有明确定义,因此可能会因实现而异 - Chrome区分“该组匹配空字符串”和“该组根本不匹配”。而 IE 不做这种区分(或者如果做,它会将第二种情况的返回类型强制为空字符串)。

总结 - 使用 (A) 因为您知道如果没有 x 则捕获组肯定与 '' 匹配。使用 (B) 取决于浏览器是否区分“零长度匹配”和“根本不匹配”。

关于Javascript 正则表达式问号跨浏览器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9074914/

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