0

なぜこれが機能しないのですか

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

Error : Web ページのエラーの詳細

ユーザー エージェント: 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 のデバッガーから直接コピーされたエラー

4

1 に答える 1

2

2 つの理由: 部分文字列の出現を置換しているのではなく、DOM 要素で文字列操作メソッドを使用しようとしています。次のようなことをしたほうがいいです:

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

しかし、この場合、私は本当に正規表現のファンではありません (正規表現は大好きですが、必要な場合のみです)。"すべてを""次のように置き換えます。

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

より速く、読みやすく、同じ結果が得られます。ただし、注意すべき点が 1 つあります。ソース文字列にすでに二重引用符 ( "") が含まれている場合、これらは 4 倍になります。これが可能なシナリオである場合、次のような正規表現が必要です。

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

これは、引用符が前後に付いていない引用符にのみ一致します... 上記の解決策のいずれかを選択しますが、覚えておいてください: 最初のオプションを使用することを選択した場合、研究により、引用符が付く可能性が 50% 高くなることが示されています友達が少ない;-)。

于 2012-04-10T11:30:05.610 に答える