繁体   English   中英

正则表达式用匹配的第一个char和大写的第二个char替换模式

[英]Regex replace pattern with first char of match & second char in caps

假设我有以下字符串:

"a test-eh'l"

我想把每个单词的开头大写。 一个单词可以用空格,撇号,连字符,正斜杠,句号等分隔。所以我希望字符串结果如下:

"A Test-Eh'L"

我并不太担心从gsub调用中获得第一个字符大写,因为事后很容易做到。 但是,当我一直使用IRB和匹配方法时,我似乎只得到一个结果。 当我使用扫描时,它会收集匹配,但问题是我无法用它做太多,因为我需要替换原始字符串的内容。

这是我到目前为止所拥有的:

"a test-eh'a".scan(/[\s|\-|\'][a-z]/)
=> [" t", "-e", "'a"]

"a test-eh'a".match(/[\s|\-|\'][a-z]/)
=> #<MatchData " t"> 

然后,如果我使用gsub尝试模式:

"a test-eh'a".gsub(/[\s|\-|\'][a-z]/, $1)
TypeError: can't convert nil into String

在javascript中,我通常会在前面部分使用括号而不是方括号。 但是,这样做时我在扫描调用中没有得到正确的结果。

"a test-eh'a".scan(/(\s|\-|\')[a-z]/)
=> [[" "], ["-"], ["'"]] 

"a test-eh'a".gsub(/(\s|\-|\')[a-z]/, $1)
=> "a'est'h'" 

任何帮助,将不胜感激。

尝试这个:

"a test-eh'a".gsub(/(?:^|\s|-|')[a-z]/) { |r| r.upcase }
# => "A Test-Eh'A"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM