gpt4 book ai didi

javascript - 在 IE7|8 中用特殊替换模式替换字符串的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:03:08 25 4
gpt4 key购买 nike

在使用特殊替换模式时,我在 IE7|8 中发现了一个非常奇怪的问题:

'moo$$e'.replace( /\$/g, '$$$$' );
'moo$$e'.replace( '\$', '$$$$', 'g' );

最新的 Chrome:

 moo$$$$e moo$$$e

最新的火狐:

 moo$$$$e moo$$$$e

IE7|8:

 moo$$$$e moo$$$$$e

我知道flags parameter is nothing like a standard ,因此在第二种情况下 Firefox 和 Chrome 之间存在差异。 我对此很满意

但是,我在 IE7|8 中看到的情况确实很奇怪(仍然是第二种情况)。我试过玩 '\x24',转义等等,但我找不到任何方法让它按预期工作($$ 代表 $).

我知道这可以通过 split()join() 轻松完成,例如:

'moo$$e'.split( '$' ).join( '$$' );
> "moo$$$$e"

但我真的非常好奇 IE 有什么问题。有什么解释吗?

参见 live example .

最佳答案

测试用例

我重新访问了 test case结果如下:

var results = [
'YY'.replace( /Y/g, '$$' ),
'YY'.replace( 'Y', '$$', 'g' ),
'YY'.replace( 'Y', function( a, b ) { return '$$'; }, 'g' ),
'YY'.replace( /Y/g, function( a, b ) { return '$$'; })
];

console.log( results.join( '\n' ) );

结果

Chrome

$$    // '$$' -> '$', global flag used, every 'Y' -> '$'
$Y // '$$' -> '$', global flag ignored, first 'Y' -> '$'
$$Y // '$$' -> '$$', global flag ignored, first 'Y' -> '$$'
$$$$ // '$$' -> '$$', global flag used, every 'Y' -> '$$'

火狐

$$    // '$$' -> '$', global flag used, every 'Y' -> '$'
$$ // '$$' -> '$', global flag used, every 'Y' -> '$'
$$$$ // '$$' -> '$$', global flag used, every 'Y' -> '$$'
$$$$ // '$$' -> '$$', global flag used, every 'Y' -> '$$'

IE7 和 8

$$    // '$$' -> '$', global flag used, every 'Y' -> '$'
$$Y // '$$' -> '$$', global flag ignored, first 'Y' -> '$$'
$$Y // '$$' -> '$$', global flag ignored, first 'Y' -> '$$'
$$$$ // '$$' -> '$$', global flag used, every 'Y' -> '$$'

结论

  1. flags used this way don't belong to any standard 以来,Chrome 忽略了 'g' 标志作为 String.replace 的第三个参数。 .

  2. IE 假定 $$ 是字符串而不是替换控件,并在这种情况下忽略全局标志:

    'YY'.replace( 'Y', '$$', 'g' );

  3. 确保结果始终相同的最简单解决方案是使用带有标志 (/foo/flags) 的 RegExp 对象作为第一个参数,并且字符串或函数作为第二个参数。

    如果字符串是第二个参数,$$ 将转换为 $。如果这是功能驱动的替换,则不存在此类转换。

关于javascript - 在 IE7|8 中用特殊替换模式替换字符串的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16774395/

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