使用正则表达式从带有 CamelCase 的文本生成搜索词

generate search words from text with CamelCase by using regEx

我想从此文本中生成带有 CamelCase 搜索词。 我不知道这是否仅适用于 RegEx。但我已经很接近了。 我在脚本语言中使用它 AutoHotkey (https://autohotkey.com/docs/misc/RegEx-QuickRef.htm) .

数据:推荐用于未来的 AutoHotkey 版本。

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

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

嗯,这是正则表达式:

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

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

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

Group 1 结合了 Group 2Group 3.

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

如前所述,我认为不可能创建一个组合第 3 组和第 4 组的组,因为它们重叠。除此之外,这应该可以,如您所愿。