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

时间:2017-02-12 19:07:23

标签: css regex atom-editor class-names

过去几天我一直在努力解决这个问题。如果这是重复的话我很抱歉,在搜索这个特定问题时我无法找到所需的内容。

我有类名如下:

class="block underline primary"

className="text-center block primary-dark"

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

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

  1. 确保该字符串包含在class=""className=""
  2. 确保它只匹配确切的字词,所以在上面它只匹配block而不是inline-block,如果这就是我要搜索的内容。
  3. 我目前有几乎做我需要的东西,但不考虑classNameclass并且会返回一个类中未包含的段落或内容我不想要:

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

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

    修改

    我还需要考虑以下类名:

    class="block block-title blockDisabled"

    所以最后我只想定位block而不是其他任何目标。

1 个答案:

答案 0 :(得分: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”是您所在的类将block类替换为。

<强>解释

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