0

为什么这不起作用

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;平板电脑 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 的调试器复制的错误

4

1 回答 1

2

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

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% 的可能性有更少的朋友;-)。

于 2012-04-10T11:30:05.610 回答