说我有字符串str = "ASimpleNoSpaceTitle".我似乎无法理解如何使用正则表达式来分割和提取所有大写单词以便我得到["A", "Simple", "No", "Space", "Title"].
什么是正常表达将完成这项工作?
更新:带有和没有空格/大写的单词串怎么样?像"ASimpleNoSpaceTitle and a subtitle"到["A", "Simple", "No", "Space", "Title", "and", "a", "subtitle"]
使用String#scan带有字符类范围会得到你想要什么简单的,易于理解的正则表达式:
str = "ASimpleNoSpaceTitle"
str.scan(/[A-Z][a-z]*/) # => ["A", "Simple", "No", "Space", "Title"]
Run Code Online (Sandbox Code Playgroud)
您可以使用POSIX括号表达式[[:upper:]]和[[:lower:]],这样可以让你的正则表达式来也处理非ASCII字母,如A或C:
str = "ÀSimpleNoSpaçeTitle"
str.scan(/[A-Z][a-z]*/) # => ["Simple", "No", "Spa", "Title"]
str.scan(/[[:upper:]][[:lower:]]*/) # => ["À", "Simple", "No", "Spaçe", "Title"]
Run Code Online (Sandbox Code Playgroud)
要允许单词以不带另一个字母开头的小写字母开头,您可以使用此变量:
str = "ASimpleNoSpaceTitle and a subtitle"
str.scan(/[A-Za-z][a-z]*/) # => ["A", "Simple", "No", "Space", "Title", "and", "a", "subtitle"]
# OR
str.scan(/[[:alpha:]][[:lower:]]*/)
Run Code Online (Sandbox Code Playgroud)