好吧,在在这里和 Google 上进行了高低搜索之后,我必须硬着头皮在这里提出一个有关 IE8 中的 RegEx 的新问题。
我有以下代码:
var output = input.replace(/^\S+(\s| )+/, '');
其目的是从金额中删除货币名称,因此“kr 12 345,00”变为“12 345,00”,“NOK 12 345,00”变为“12 345,00”,依此类推。
除了 Internet Explorer 版本 8 或更低版本之外,这在任何地方都可以正常工作,在这些版本中,它会保持输入不变。
最初我使用的是 new RegExp()
方式来执行此操作,但将其更改为正则表达式文字,以查看 IE 处理这两种变体的方式是否存在差异 - 值得庆幸的是,没有:)
我也尝试过仅使用 \s
和仅使用
但这并没有什么区别。
真正奇怪的是,当使用“kr 12 345,00”作为 W3 School's "Try It Yourself" page 上的输入运行上述正则表达式时在 IE 8 中工作正常! (当第一个空格被
替换时也是如此)
重申一下:我看到这个问题的地方是在我的 Javascript 代码中使用正则表达式时,它驻留在 AngularJS 过滤器函数中(我正在定义一个过滤器),并且过滤器返回原始输入IE8(在 IE8 中也可以通过 console.log() 看到)。其他人在 IE9 中为我测试了它,并报告说它在那里工作得很好 - 我也在 Chrome 中进行了测试。我遇到此问题的唯一浏览器是 IE8 和 IE7。
这里到底发生了什么?
最佳答案
尝试
var output = input.replace(/^\S+([\s\xA0]| )+/, '');
根据here ,“在 IE8 中...\s(应包括所有空白)不包括不间断空格”。
或者更好,只需使用
var output = input.replace( /^\D+/, '' );
其中 \D
是任何非数字字符。
关于javascript - 正则表达式在 IE8 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15095862/