我有以下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+)/);
答案 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
)匹配。