次のような coffeescript コード行があります (dCnt と sDesc はどちらも jQuery オブジェクトです)。これは、場所を移動しながら HTML ブロックの基本的なクリーンアップを行います。
dCnt.append(sDesc.html().replace( /<div/gi, '<p' ).replace( /<\/div>/gi, '</p>' ).replace /\sstyle="text-align: center;"/gi, '')
これにより、次の JavaScript が出力されます。
dCnt.append(sDesc.html().replace(/<div/gi, '<p').replace(/<\/div>/gi, '</p>').replace(/\sstyle="text-align: center;"/gi, ''));
最初の 2 つの置換は問題を引き起こしませんが、3 番目の置換は、coffeescript コンパイラが処理できる何かを考え出すのに少し手間がかかりました。
これまでのところ、次のことを発見しました。
1) 最後の置換の前後に括弧 () がある場合、coffeescript は二重引用符を文字列として解釈し、混乱します (スラッシュの 1 つを除算として解釈してしまいます)。
2) 数学エラーを停止する括弧を削除すると、正規表現内の空白がコンパイラを混乱させます。上記のコードの \s の代わりに空白を使用した出力は (最終的にひどく壊れた括弧に注意してください)交換):
dCnt.append(sDesc.html().replace(/<div/gi, '<p').replace(/<\/div>/gi, '</p>').replace / (style = "text-align: center;" / gi), '');
置換が括弧を含むセットに含まれていない場合 (つまり、コードから dCnt.append() を削除し、別の行でそれを処理する)、正規表現の空白により、コンパイラは予期しない ',' をスローします。エラー (これは少なくとも、ガベージ JavaScript を生成するよりは望ましい方法です...)。
括弧を削除する必要があるため (coffeescript ではオプションですが、削除するとコードの可読性が大幅に低下することがわかりました)、この問題に悩まされている 2 つの関数呼び出しをチェーンすることはできません。
jQuery チェーンをそのまま使用する機能を維持しながら、この問題に対する脆弱性の低いソリューションを思い付くことができる人はいますか?