使用regEx从带有CamelCase的文本生成搜索词

时间:2018-11-16 20:56:47

标签: regex autohotkey

我希望从此文本中使用CamelCase搜索词来生成。 我不知道只有RegEx才有可能。但是我已经很近了 我在脚本语言AutoHotkey(https://autohotkey.com/docs/misc/RegEx-QuickRef.htm)中使用它。

数据:推荐用于以后的AutoHotkeyReleases。

regEx:(((\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})来自Splitting CamelCase with regex

(([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

1 个答案:

答案 0 :(得分:1)

我制作的正则表达式几乎可以满足您的需求。但是,我缺少一种组合。我不认为这是可能的,因为这需要将括号重叠,'Hotkey'必须是两个不同重叠组的一部分。

好吧,这是正则表达式:

/\b((\w+?(?=[A-Z]|\b))([A-Z][a-z]*)?)([A-Z][a-z]*)?/g

它以单词boundary开始,然后创建2个组,Group 2匹配任何Word字符一次或多次(不完整),直到look ahead为{{ 1}}字母或单词Capital

第3组将匹配boundary个字母,后跟零个或多个Capital个字母。那是可选的。

lowercase组合了Group 1Group 2

最后Group 3将匹配一个Group 4字母,后跟零个或多个Capital字母。那是可选的。

如上所述,我认为创建合并第3组和第4组的组是不可能的。除此之外,这应该可以工作。