regex - 使用正则表达式从带有 CamelCase 的文本中生成搜索词
问题描述
我想从这个文本中用 CamelCase 搜索词来生成。我不知道这是否仅适用于 RegEx。但我已经很接近了。我在脚本语言 AutoHotkey ( https://autohotkey.com/docs/misc/RegEx-QuickRef.htm ) 中使用它。
数据:推荐用于未来的 AutoHotkeyReleases。
正则表达式:(((\b[^A-Z\s]*)?([A-Z][a-z]+)|([\W_-]?[a-z]+)))
(https://regex101.com/r/NgRmXZ/2)
预期组:
reCommended
re
Commended
for
future
Auto
Hotkey
AutoHotkey
HotkeyReleases
Releases
AutoHotkeyReleases.
我也尝试过,但对我不起作用:
(?=\p{Lu}\p{Ll})|(?<=\p{Ll})(?=\p{Lu})
从使用正则表达式拆分 CamelCase
(([a-z]*)(?<=[a-z])((?:[A-Z])[a-z]+))
https://regex101.com/r/NgRmXZ/3
(?<=[a-z])([A-Z])|(?<=[A-Z])([A-Z][a-z])
https://regex101.com/r/NgRmXZ/4
((?<!^)([A-Z][a-z]+|(?<=[a-z])[A-Z][a-z]+))
https://regex101.com/r/B5vXaZ/1
我已经开始在这里实现我的原型了: https ://gist.github.com/sl5net/ba5aef19f44fe68204ccb6c96e7c96e0
解决方案
我制作了一个几乎可以满足您需求的正则表达式。但是,我缺少一种组合。我不认为,这是可能的,因为它需要括号重叠,'Hotkey'
必须是两个不同重叠组的一部分。
好吧,这是正则表达式:
/\b((\w+?(?=[A-Z]|\b))([A-Z][a-z]*)?)([A-Z][a-z]*)?/g
它由一个 Word 开始boundary
,然后创建 2 个组,Group 2
匹配任何Word
字符一次或多次(不贪婪),直到达到 a look ahead
for a Capital
letter OR a Word boundary
。
第 3 组将匹配一个Capital
字母后跟零个或多个lowercase
字母。那是可选的。
Group 1
结合Group 2
和Group 3
。
finallyGroup 4
将匹配一个Capital
字母后跟零个或多个lowercase
字母。那是可选的。
如前所述,我认为不可能创建一个组合第 3 组和第 4 组的组,因为它们重叠。除此之外,这应该如你所愿。
推荐阅读
- python - 为什么我的程序最后打印 None ?
- javascript - 如何在下拉菜单中有隐藏选项?
- marklogic - Marklogic 数据中心升级问题
- java - 是否可以对 ActiveMQ 主题进行分区,以便它使用消息中的键来确定将消息发布到哪个分区?
- python-3.x - 带有屏幕点击问题的无限while循环
- python - 无法安装 jupyter(Python 3.9.0、macos 11)
- firebase - 如何从 Firestore 中检索多个值?
- redux - 关于 react-redux npm 包 'peerDependencies' 的问题
- php - 如何在 PHP 中有特殊字符时访问对象属性
- uwp - 在专用网络上分发商店应用程序的选项