用于在 Atom 编辑器中替换整个代码库中的类名的正则表达式
Posted
技术标签:
【中文标题】用于在 Atom 编辑器中替换整个代码库中的类名的正则表达式【英文标题】:Regex for replacing class names throughout codebase in Atom Editor 【发布时间】:2017-06-30 17:22:43 【问题描述】:过去几天我一直在为此苦苦挣扎。如果这是重复的,我深表歉意,我在搜索这个特定问题时无法找到我需要的内容。
我有如下类名:
class="block underline primary"
className="text-center block primary-dark"
class="grey bg-black inline-block block"
我想使用 Atom 的正则表达式搜索功能搜索整个代码库,并用新的类名替换每个实例。我需要以下规则:
-
确保字符串包含在
class=""
或className=""
中
确保它只匹配确切的单词,所以在上面它只会匹配 block
而不是 inline-block
如果那是我要搜索的。
我目前有这个 几乎 可以满足我的需要,但没有考虑到 className
或 class
并且会返回我不包含在类中的段落或内容想要:
(\s(block)\s)|(="(block)\s)|(\s(block)")
有什么方法可以一举进行正则表达式查找和替换?我知道我可能无法获得所有内容,因为可以以编程方式添加类,但我希望通过查找和替换尽可能多地获得,而不是搞砸其他事情。非常感谢任何帮助或指导。
编辑
我还需要考虑如下类名:
class="block block-title blockDisabled"
所以最后我只想定位block
而没有别的。
【问题讨论】:
【参考方案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”是您要替换的类 @987654329 @ 类)。
说明:
(className|class)
- 捕获属性名称
="
- 匹配属性值的开启
(?:
- 非捕获组的开始
block
- 匹配字符串 block
|
- 或者...
block\s([^"]*)
- 捕获字符串 block
之后的类
|
- 或者...
([^"]*)\sblock
- 捕获字符串 block
之前的类
|
- 或者...
([^"]*)\sblock(?=\s)([^"]*)
- 捕获字符串 block
周围的类
)
- 非捕获组结束
"
- 匹配属性值的关闭
【讨论】:
感谢您的快速回复!抱歉,我应该提到可以包含像block-title
或 blockOverlay
这样的类名,我不想定位,请参见此处:regex101.com/r/xICKkv/1 我只想替换“块”的实例,周围没有任何内容.这可能吗?
@ftntravis - 我想我明白了......我添加了一个解释;这是updated example...
非常感谢!!!这似乎工作完美。我真的很感激帮助。这将节省很多时间! :D以上是关于用于在 Atom 编辑器中替换整个代码库中的类名的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
Atom / Sublime喜欢Jupyter中的Multiple选择