[英]How to extract all words of a camel cased string with a regular expression?
假设我有一个由多个单词组成的字符串。 这些词没有用空格分隔,但每个词都以大写字母开头。 这种命名约定通常称为“驼峰命名法”。 一些例子:
现在我想将这些字符串拆分成单个单词, FirstNumberAfterACharacter
变成["First", "Number", "After", "A", "Character"]
。
找到匹配这些字符串的正则表达式也很容易: ^([AZ][az]*)+$
。 但是如果我尝试获取所有匹配项,这个正则表达式将只返回最后一个匹配项:
irb(main):003:0> /^([A-Z][a-z]*)+$/.match('FirstNumberAfterACharacter').captures
=> ["Character"]
irb(main):004:0> 'FirstNumberAfterACharacter'.scan(/^([A-Z][a-z]*)+$/)
=> [["Character"]]
那么我如何获得所有匹配项,而不仅仅是最后一个匹配项?
我将您的正则表达式更改为:
以由单个大写字母组成的组(...)
开头: [AZ]{1}
,后跟零个或多个大写字母[^AZ]*
。
'FirstNumberAfterACharacter'.scan(/([A-Z][^A-Z]*)/).flatten(1)
您可以使用正则表达式提取任何类型的 Unicode 大写字母,后跟任何非大写字母:
'FirstNumberAfterACharacter'.scan(/\p{Lu}\P{Lu}*/)
# => ["First", "Number", "After", "A", "Character"]
请参阅Ruby 在线演示。
详情:
\p{Lu}
- 任何 Unicode 字母\P{Lu}*
- 除 Unicode 个字母外的零个或多个 ( *
) 个字母。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.