regex - 如何在vscode中用查找和替换的kebab case字符串替换所有camel case字符串
问题描述
我有一个 vue 项目的大量 html 文件,这些文件当前使用不一致的道具
有些道具v-bind:prop-name=""
有些是v-bind:propName=""
,有些使用简写:prop-name=""
或:propName=""
。
我想根据vue docs用 :prop-name="" 语法替换所有道具。
我知道您可以在 vscode(或类似的编辑器)中使用正则表达式来仅选择具有 camelCase 格式的道具,但我遇到了一些问题。
对于查找正则表达式,我不知道如何:
- 选择
v-bind:
或:
作为前缀并从选择组中排除它 - 将 camelCased 字符串拆分为选择组
- 处理 propNameWithMoreThanTwoWords
对于替换语法,我很确定我
:\L$1-$2="
在其他编辑器上找到的语法是正确的替换语法,但我也想在这方面提供一些帮助。
完全可以通过多次传递来尝试在最终更新之前以相同格式获取所有内容。
我不反对使用其他编辑器或类似 codemod 之类的东西(尽管我使用 Windows)
解决方案
要选择所有需要修改的字符串,请使用 RegEx Find
Find: ((?:v-bind)?:)([a-zA-Z0-9]+)([A-Z][a-z0-9]+)
Options: .* (RegEx) Aa (Match Case)
使用菜单选项Selection | Select All Occurrences
。
当您选择了所有要更改的内容(包括v-bind
and :
)后,您可以使用以下键绑定将变量名称替换为 kebab case
{
"key": "ctrl+shift+alt+f8", // or any other keybinding combo
"command": "editor.action.insertSnippet",
"args": {
"snippet": "${TM_SELECTED_TEXT/([A-Z][a-z0-9_]+)/-${1:/downcase}/g}"
},
"when": "editorHasMultipleSelections && textInputFocus"
}
也可以使用以下正则表达式进行查找替换
Find: ((?:v-bind)?:)([a-zA-Z0-9]+)([A-Z][a-z0-9]+)
Replace: $1$2-\L$3
Options: .* (RegEx) Aa (Match Case)
它可用于搜索文件查找-替换。
您必须多次应用此 Find-Replace,与具有最多大写字母的变量中的大写单词一样多。Find-Replace 调整变量名的最后一个大写单词。再次应用它,它将调整现在最后一个大写单词。您可以在搜索文件中查看是否仍需要转换。
感谢马克指出我被Match Case
陷阱咬了。在编程中默认是Match Case
,但在 VSC 中,默认是Ignore Case
推荐阅读
- java - for(String string : myWord) 的另一种写法
- java - NumberFormatException: Invalid int 即使它真的是一个整数
- c++ - 为什么在这种情况下递增数组名称有效?
- python - Pytorch,如何将 CNN 的输出输入到 RNN 的输入中?
- android - 如何通过routing.openstreetmap.de在两点之间获得多条路线?
- python - 大规模矩阵路由——缺少令牌/API 密钥错误
- eclipse - printf 不在 Eclipse 的控制台上打印
- eos - 使用 RPC 的 EOS 交易
- javascript - 在 Javascript 中单击时从按钮的动态 ID 中获取值
- reactjs - 我在哪里可以找到 CRA 中的 .eslintrc?