IE7|8中使用特殊替换模式替换字符串的奇怪行为
Odd behavior replacing string with special replacement patterns in IE7|8
我在IE7|8使用特殊的替换模式时发现了一个非常奇怪的问题:
'moo$$e'.replace( /'$/g, '$$$$' );
'moo$$e'.replace( ''$', '$$$$', 'g' );
最新铬:
moo$$$$e moo$$$e
最新Firefox: moo$$$$e moo$$$$e
IE7 | 8:
moo$$$$e moo$$$$$e
我知道flags参数一点也不像标准,因此Firefox和Chrome在第二种情况下的区别。我很酷
然而,我在IE7|8中看到的情况真的很奇怪(仍然是第二种情况)。我试着玩''x24'
,逃跑和东西,但我找不到任何方法让这个工作如预期($$
代表$
)。
我知道这可以很容易地完成split()
和join()
,如:
'moo$$e'.split( '$' ).join( '$$' );
> "moo$$$$e"
但是我真的,真的很好奇IE出了什么问题。有什么解释吗?
测试用例
我重新访问了测试用例,结果如下:
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' ) );
<标题> 结果铬
$$ // '$$' -> '$', global flag used, every 'Y' -> '$'
$Y // '$$' -> '$', global flag ignored, first 'Y' -> '$'
$$Y // '$$' -> '$$', global flag ignored, first 'Y' -> '$$'
$$$$ // '$$' -> '$$', global flag used, every 'Y' -> '$$'
Firefox $$ // '$$' -> '$', global flag used, every 'Y' -> '$'
$$ // '$$' -> '$', global flag used, every 'Y' -> '$'
$$$$ // '$$' -> '$$', global flag used, every 'Y' -> '$$'
$$$$ // '$$' -> '$$', global flag used, every 'Y' -> '$$'
IE7和ie8
$$ // '$$' -> '$', global flag used, every 'Y' -> '$'
$$Y // '$$' -> '$$', global flag ignored, first 'Y' -> '$$'
$$Y // '$$' -> '$$', global flag ignored, first 'Y' -> '$$'
$$$$ // '$$' -> '$$', global flag used, every 'Y' -> '$$'
<标题>结论
Chrome忽略
'g'
标志作为String.replace
的第三个参数,因为这种方式使用的标志不属于任何标准。IE假定
$$
是字符串而不是替换控件,在这种情况下忽略全局标志:'YY'.replace( 'Y', '$$', 'g' );
确保结果始终相同的最简单的解决方案是使用带有标志(
/foo/flags
)的RegExp
对象作为第一个参数,并将字符串或函数作为第二个参数。如果string是第二个参数,则
$$
转换为$
。如果这是一个功能驱动的替换,则不存在这样的转换。
相关文章:
- 如何用jquery替换字符串中可能变化的字符
- 用数字单位替换字符串的一部分
- 替换字符串javascript中的所有特殊字符..
- 替换字符串的脚本;在某些网站上不起作用
- 使用javascript替换字符串中除第一个和最后一个之外的所有字符
- 替换字符串中的占位符值
- 用HTML元素替换字符串的一部分
- JavaScript来替换字符串中的变量
- 如何替换字符串中最后一个出现的变量
- 在JavaScript中,如何用一个字符替换字符串中的所有字母
- 替换字符串中的数字
- 如何使用JavaScript Regex替换字符串中双引号之间的文本
- JavaScript:替换字符串两边的字符
- 用JQuery/Javascript替换字符串中的所有逗号
- 替换字符串的下一个匹配项
- JavaScript 不会替换字符串的最后一个符号
- 在 JavaScript 中替换字符串中的字母
- 修复了如何在容器中查找和替换字符串的功能
- 需要在 javascript 倒计时达到 0 后替换字符串
- j如何从给定字符串的一部分替换字符串