js替换方法中的正则表达式不起作用

时间:2012-04-10 11:25:16

标签: javascript regex internet-explorer

为什么这不起作用

var value = arr[row][col].replace(new RegExp('"', 'g'),'""');

错误:网页错误详情

用户代理:Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 6.1; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0 ; InfoPath.2; Tablet PC 2.0) 时间戳:星期二,2012年4月10日11:22:01 UTC

消息:对象不支持此属性或方法 行:1041 查尔:25 代码:0 URI:http://example.com/

消息:对象不支持此属性或方法 行:1041 查尔:25 代码:0 URI:http://example.com/

消息:对象不支持此属性或方法 行:1041 查尔:25 代码:0 URI:http://example.com/

注意::直接从IE8的调试器中复制错误

1 个答案:

答案 0 :(得分:2)

两个原因:您没有替换子字符串的出现,而是尝试在DOM-Element上使用字符串操作方法。最好做这样的事情:

var value = arr[row][col].innerHTML.replace(new RegExp('"', 'g'),'""');

但在这种情况下,我真的不喜欢正则表达式(我喜欢正则表达式,但仅在需要时)。我会将所有"替换为"",如下所示:

var value = arr[row][col].innerHTML.split('"').join('""');

更快,更易于阅读,并为您提供相同的结果。虽然要记住一件事:如果源字符串已经包含双引号(""),那么它们将翻两番。如果这是一种可能的情况,你需要这样的正则表达式:

var value = arr[row][col].innerHTML.replace(/(?:[^"]"(?:[^"]))/g,'""');

这只会匹配既没有引号也没有引号的引号...选择上述任何解决方案,但请记住:如果您选择使用第一个选项,研究表明您已经多了50%可能会有更少的朋友; - )。