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

Regex for replacing class names throughout codebase in Atom Editor

最近几天我一直在为此苦苦挣扎。如果这是重复的,我深表歉意,我在搜索这个特定问题时找不到我需要的东西。

我有 class 个名字,如下所示:

class="block underline primary"

className="text-center block primary-dark"

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

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

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

我目前有这个 几乎 可以满足我的需要,但不考虑 classNameclass 并且会 return我不想要 class 中未包含的段落或内容:

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

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

编辑

我还需要考虑如下 class 个名称:

class="block block-title blockDisabled"

所以最后我只想瞄准 block 而不是别的。

您可以使用以下表达式:

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

Live Example Here

从那里开始,如果您想删除 block class,您可以使用 ="" 进行替换。

但是,如果您想要替换 block class,正如您的标题所暗示的,那么您将使用 =" replacement-class" 进行替换(其中字符串 "replacement-class" class 是您要用 block class 替换的 class。

解释:

  • (className|class) - 捕获属性名称
  • ="——匹配属性值的开头
    • (?: - non-capturing 组的开始
      • block - 匹配字符串 block
      • | - 或...
      • block\s([^"]*) - 捕获字符串 block
      • 之后的 classes
      • | - 或...
      • ([^"]*)\sblock - 捕获字符串 block
      • 之前的 classes
      • | - 或...
      • ([^"]*)\sblock(?=\s)([^"]*) - 捕获字符串 block
      • 周围的 classes
    • ) - non-capturing 组结束
  • "——匹配属性值的结尾