正则表达式匹配()适用于FF / Chrome但不适用于IE 8

时间:2011-10-28 21:34:00

标签: jquery regex internet-explorer-8

我有以下jQuery调用,它返回FF / Chrome中的匹配,但在IE 8中返回null。

Here's the fiddle如果您想亲自尝试一下。

这是不可解决的,不可行的,任性的代码:

var m = $('#somediv').text().match(/\d+-(\d+)\sof\s(\d+)/);

编辑:感谢Rob W.我已经缩小了一点;以下是有效的,所以它特别是“of”或“\ sof \ s”失败了。把小提琴分开并为自己尝试一些:(

var m = $('#somediv').text().match(/\d+\D(\d+)\D+(\d+)/);

3 个答案:

答案 0 :(得分:3)

以Rob W的答案为基础,该答案解决了replace默认情况下不会全局替换的问题,另一件事就是您正在搜索的实际文本。 Rob W还指出,由于您使用jQuery的text()获取文本,因此 实体已被解码为实际的,非破坏性的空格字符。

 是一个HTML实体,将其指定为replace的参数并不会将其实际解释为非中断空格,它只是要查找实际文本{{主题字符串中的1}}。

在IE 8和IE 7兼容模式下为搜索正则表达式中的非中断空格(00A0)指定Unicode代码点:

 

在IE 9中,它可以正常工作,因为它和其他浏览器一样,在var m = t.replace(/\u00a0/g, ' ').match(/\d+-(\d+)\sof\s(\d+)/); 中包含不间断的空格。 Older versions of IE don't,这是替换必要的唯一原因。

答案 1 :(得分:2)

您的代码只会替换 的第一次出现。但是,由于您使用.text()获取文字,因此不需要replace功能。

var m = t.replace(/ /g, ' ').match(/\d+-(\d+)\sof\s(\d+)/);

如果使用上一行未解决您的问题,请使用alert(t)检查输入是否符合预期。

答案 2 :(得分:2)

使用此RegExp:

/\d+-(\d+)\xa0of+\xa0(\d+)/

http://jsfiddle.net/gilly3/KNbpN/

可悲的是,似乎IE8不会将不间断的空格识别为空格(\s)匹配。