从camelCase到SNAKE_CASE的所有文本

Dan*_*cia 7 regex notepad++

我正在尝试使用Notepad ++宏进行一些文本操作.我的最后一步是将camelCase字符串转换为SNAKE_CASE.到目前为止没有运气.我对正则表达式不太熟悉,所以无法编写自己的解决方案.

示例文本文件输入:

firstLine(874),
secondLine(15),
thirdLineOfText87(0x0001);
Run Code Online (Sandbox Code Playgroud)

期望的输出:

FIRST_LINE(874),
SECOND_LINE(15),
THIRD_LINE_OF_TEXT_87(0x0001);
Run Code Online (Sandbox Code Playgroud)

正则表达式或任何插件是一个可接受的答案.

Wik*_*żew 10

我建议采用以下正则表达式方法:

查找内容:      (\b[a-z]+|\G(?!^))((?:[A-Z]|\d+)[a-z]*)
替换为:\U\1_\2
匹配大小写:.

这将把camelCase87LikeThis话转向CAMEL_CASE_87_LIKE_THIS.如果您需要为以大写字母开头的骆驼字添加支持,请使用以下正则表达式修改:

(\G(?!^)|\b[a-zA-Z][a-z]*)([A-Z][a-z]*|\d+)
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示(也在Notepad ++中测试).注意\G正则表达式内部的位置并添加A-Z.

细节:

  • (\b[a-z]+|\G(?!^)) - 第1组捕获两种替代方案中的任何一种:
    • \b[a-z]+- 开始一个单词(\b这里是初始单词边界),后跟1个小写ASCII字母
    • |- 要么
    • \G(?!^) - 上一次成功比赛的结束位置
  • ((?:[A-Z]|\d+)[a-z]*) - 第2组捕获:
    • (?:[A-Z]|\d+)- 大写ASCII字母([A-Z])或(|)1+位数(\d+)
    • [a-z]* - 0+小写ASCII字母.

\U\1_\2替换模式接通所有的字符与为大写\U并插入_两组(插入之间\1\2反向引用).

在此输入图像描述

  • 您可以使用 [`(\G(?!^)|\b[a-zA-Z][az]*)([AZ][az]*|\d+)`](https://regex101.com /r/uj9mGm/1),技巧是将 `\G` 分支作为交替组中的第一个替代项,并在单词开头添加对大写字母的支持。 (2认同)