我有以下咖啡脚本代码行(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, ''));
前两个替换没有问题,但第三个需要一些工作才能提出咖啡脚本编译器可以处理的东西,结果对我来说过于局限和脆弱。
到目前为止,我发现:
1)如果我在最后的替换周围有括号 (),那么 coffeescript 将双引号解释为一个字符串并感到困惑(它最终将一个正斜杠解释为一个除法)。
2)如果我删除了停止 MATH 错误的括号,那么正则表达式中的任何空格都会使编译器感到困惑 - 上面代码的输出带有空格而不是 \s 是(注意最后的可怕破括号代替):
dCnt.append(sDesc.html().replace(/<div/gi, '<p').replace(/<\/div>/gi, '</p>').replace / (style = "text-align: center;" / gi), '');
如果替换不在括号中(即从代码中删除 dCnt.append() 并在单独的行上处理),则正则表达式中的空格将导致编译器抛出 Unexpected ','错误(这至少比生成垃圾 JavaScript 更可取......)。
由于需要删除括号(coffeescript 中的可选,尽管我发现将它们排除在外会严重降低代码的可读性),因此无法链接受此问题影响的两个函数调用。
任何人都可以想出一个不那么脆弱的解决方案来解决这个问题,仍然可以完整地使用 jQuery 链接吗?