Regex,用于在Atom编辑器中替换整个代码库中的类名



过去几天我一直在为此而挣扎。如果这是重复的,我很抱歉,我在搜索这个特定问题时找不到我需要的东西。

我的类名如下:

class="block underline primary"

className="text-center block primary-dark"

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

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

  1. 确保字符串包含在class=""className=""
  2. 确保它只匹配确切的单词,所以在上面的文章中,如果我在搜索block,它只匹配inline-block

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

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

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

编辑

我还需要考虑像以下这样的类名:

class="block block-title blockDisabled"

所以最后我只想把目标锁定在block上,其他什么都不想。

您可以使用以下表达式:

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

此处的实时示例

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

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

解释:

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

最新更新