用于在 Atom 编辑器中替换整个代码库中的类名的正则表达式

Posted

技术标签:

【中文标题】用于在 Atom 编辑器中替换整个代码库中的类名的正则表达式【英文标题】:Regex for replacing class names throughout codebase in Atom Editor 【发布时间】:2017-06-30 17:22:43 【问题描述】:

过去几天我一直在为此苦苦挣扎。如果这是重复的,我深表歉意,我在搜索这个特定问题时无法找到我需要的内容。

我有如下类名:

class="block underline primary"

className="text-center block primary-dark"

class="grey bg-black inline-block block"

我想使用 Atom 的正则表达式搜索功能搜索整个代码库,并用新的类名替换每个实例。我需要以下规则:

    确保字符串包含在class=""className="" 中 确保它只匹配确切的单词,所以在上面它只会匹配 block 而不是 inline-block 如果那是我要搜索的。

我目前有这个 几乎 可以满足我的需要,但没有考虑到 classNameclass 并且会返回我不包含在类中的段落或内容想要:

(\s(block)\s)|(="(block)\s)|(\s(block)")

有什么方法可以一举进行正则表达式查找和替换?我知道我可能无法获得所有内容,因为可以以编程方式添加类,但我希望通过查找和替换尽可能多地获得,而不是搞砸其他事情。非常感谢任何帮助或指导。

编辑

我还需要考虑如下类名:

class="block block-title blockDisabled"

所以最后我只想定位block 而没有别的。

【问题讨论】:

【参考方案1】:

您可以使用以下表达式:

(className|class)="(?:block|block\s([^"]*)|([^"]*)\sblock|([^"]*)\sblock(?=\s)([^"]*))"

Live Example Here

从那里,如果您想删除 block 类,您可以使用 $1="$2$3$4$5" 进行替换。

但是,如果您想替换 block 类,正如您的标题所暗示的,那么您将使用 $1="$2$3$4$5 replacement-class" 进行替换(其中字符串“replacement-class”是您要替换的类 @987654329 @ 类)。

说明:

(className|class) - 捕获属性名称 =" - 匹配属性值的开启 (?: - 非捕获组的开始 block - 匹配字符串 block | - 或者... block\s([^"]*) - 捕获字符串 block 之后的类 | - 或者... ([^"]*)\sblock - 捕获字符串 block 之前的类 | - 或者... ([^"]*)\sblock(?=\s)([^"]*) - 捕获字符串 block 周围的类 ) - 非捕获组结束 " - 匹配属性值的关闭

【讨论】:

感谢您的快速回复!抱歉,我应该提到可以包含像 block-titleblockOverlay 这样的类名,我不想定位,请参见此处:regex101.com/r/xICKkv/1 我只想替换“块”的实例,周围没有任何内容.这可能吗? @ftntravis - 我想我明白了......我添加了一个解释;这是updated example... 非常感谢!!!这似乎工作完美。我真的很感激帮助。这将节省很多时间! :D

以上是关于用于在 Atom 编辑器中替换整个代码库中的类名的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Atom / Sublime喜欢Jupyter中的Multiple选择

Atom 编辑器中是不是有用于格式化 HTML 的命令?

微信小程序工具类

如何在 Atom 编辑器中查找引用(或用法)?

在 Atom 编辑器中突出显示 HTML 中的 javascript

scss Sass文件用于存储整个代码库中使用的全局常量(KTH CSC 2017的MVK项目)。