1

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

我有如下类名:

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我正在搜索的内容。

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

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

有没有办法一举进行正则表达式查找和替换?我知道我可能无法得到所有东西,因为可以以编程方式添加类,但我想尽可能多地使用查找和替换而不是搞砸其他事情。非常感谢任何帮助或指导。

编辑

我还需要考虑如下类名:

class="block block-title blockDisabled"

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

4

1 回答 1

1

您可以使用以下表达式:

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

现场示例在这里

从那里,如果你想删除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
    • )- 非捕获组结束
  • "- 匹配属性值的关闭
于 2017-02-12T19:29:15.093 回答