过去几天我一直在为此而挣扎。如果这是重复的,我很抱歉,我在搜索这个特定问题时找不到我需要的东西。
我的类名如下:
class="block underline primary"
className="text-center block primary-dark"
class="grey bg-black inline-block block"
我想使用Atom的regex搜索功能搜索整个代码库,并用新的类名替换每个实例。我需要以下规则:
- 确保字符串包含在
class=""
或className=""
中 - 确保它只匹配确切的单词,所以在上面的文章中,如果我在搜索
block
,它只匹配inline-block
我目前有一个几乎可以满足我的需求,但没有考虑className
或class
,并且会返回我不想要的类中不包含的段落或内容:
(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
周围的类
)
-非捕获组结束
"
-匹配属性值的关闭