bas*_*ibe 30 ruby regex string-split
我有一个很好的CamelCase字符串,如ImageWideNice或ImageNarrowUgly.现在我想在其子串中断掉该字符串,例如Image,Wide或Narrow,和.Nice或Ugly.
我认为这可以简单地解决
camelCaseString =~ /(Image)((Wide)|(Narrow))((Nice)|(Ugly))/
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,这样只会填补$1和$2,但不会$3.
你有更好的想法拆分那个字符串吗?
Dig*_*oss 56
s = 'nowIsTheTime'
s.split /(?=[A-Z])/
=> ["now", "Is", "The", "Time"]
Run Code Online (Sandbox Code Playgroud)
?=pattern是积极前瞻的一个例子. 它基本上匹配模式之前的字符串中的一个点. 它不消耗字符,也就是说,它不包含模式作为匹配的一部分.另一个例子:
irb> 'streets'.sub /t(?=s)/, '-'
=> "stree-s"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,s匹配(仅第二次t匹配)但不替换.感谢@Bryce和他的正则表达式doc链接.布莱斯安德森补充说明:
该
?=在年初()的比赛组被称为正向前查找,这是说,虽然正则表达式是在决定是否它匹配看文字,它不是使他们成为比赛的一部分只是一种方式.split()通常吃中间的字符,但在这种情况下,匹配本身是空的,所以没有[那里].
DigitalRoss的答案是正确的,因为它处理一般情况,你不知道它是严格的驼峰情况(第一个字符小写)还是Pascal情况(第一个字母大写).
如果您知道字符串所在的这些表单中的哪一个,或者您想强制使用其中一个,Inflector就可以执行此操作.
对于Pascal案例:
"NowIsTheTime".titleize
Run Code Online (Sandbox Code Playgroud)
对于驼峰案例:
"nowIsTheTime".titleize.camelize :lower
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12598 次 |
| 最近记录: |