Perl 中的正则表达式替换和连字符化源文件中字符串的一部分



我想替换此模式的所有出现

new Window.MyElement();

document.createElement('my-element');

请注意,MyElement 可以是任何驼峰化元素名称

我需要在我的 shell 中使用什么正则表达式来运行,例如

perl -pi -e '....' my-sourcefile.js

谢谢

perl -i -CSD -pe'
  s{new Window.(w+)();}{
     "document.createElement(x27".(
     $1 =~ s/(p{Lu})/-l$1/gr =~ s/^-//r
     )."x27);"
  }eg
' my-sourcefile.js

perl -i -CSD -MString::CamelCase=decamelize -pe'  # Only supports ASCII names
  s{new Window.(w+)();}{
     "document.createElement(x27".(
     decamelize($1) =~ s/_/-/rg
     )."x27);"
  }eg
' my-sourcefile.js

存在换行符是为了便于阅读,但可以省略它们而不会引起任何问题。