首页 > 解决方案 > perl 中的正则表达式替换和连字符源文件中字符串的一部分

问题描述

我想替换所有出现的这种模式

new Window.MyElement();

document.createElement('my-element');

请注意,MyElement 可以是任何 Camelized 元素名称

我需要在我的 shell 中运行的正则表达式可能是什么,例如

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

谢谢

标签: regexperl

解决方案


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

换行符是为了可读性而存在的,但可以省略它们而不会造成任何问题。


推荐阅读