我在JavaScript中有一个正则表达式,使用以下代码将我的驼峰大小写字母分割为大写字母(我后来从这里得到):
"MyCamelCaseString"
.replace(/([A-Z])/g, ' $1')
.replace(/^./, function(str){ return str.toUpperCase(); })
Run Code Online (Sandbox Code Playgroud)
因此返回:
"My Camel Case String"
Run Code Online (Sandbox Code Playgroud)
这很好.但是,我想把它提升一个档次.有人可以帮助我使用正则表达式,只有当前一个字符为小写且后者为大写时才会拆分.
因此,上面的例子将是我期望的结果,但如果我这样做:
"ExampleID"
Run Code Online (Sandbox Code Playgroud)
然后我回来了:
"Example ID"
Run Code Online (Sandbox Code Playgroud)
代替
"Example I D"
Run Code Online (Sandbox Code Playgroud)
因为它在每个大写字母中分裂并忽略它之前的任何内容.
希望有道理!谢谢:).
Mic*_*ral 70
我的猜测是代替/([A-Z])/用/([a-z])([A-Z])/和' $1'用'$1 $2'
"MyCamelCaseString"
.replace(/([a-z])([A-Z])/g, '$1 $2');
Run Code Online (Sandbox Code Playgroud)
/([a-z0-9])([A-Z])/ 对于计为小写字符的数字
console.log("MyCamelCaseStringID".replace(/([a-z0-9])([A-Z])/g, '$1 $2'))Run Code Online (Sandbox Code Playgroud)
Adr*_*zar 40
"MyCamelCaseString".replace(/([a-z](?=[A-Z]))/g, '$1 ')
Run Code Online (Sandbox Code Playgroud)
输出:
"My Camel Case String"
Run Code Online (Sandbox Code Playgroud)
bri*_*lov 20
如果你想要一个小写单词数组:
"myCamelCaseString".split(/(?=[A-Z])/).map(s => s.toLowerCase());
Run Code Online (Sandbox Code Playgroud)
如果你想要一串小写单词:
"myCamelCaseString".split(/(?=[A-Z])/).map(s => s.toLowerCase()).join(' ');
Run Code Online (Sandbox Code Playgroud)
如果你想分开单词但保留外壳:
"myCamelCaseString".replace(/([a-z])([A-Z])/g, '$1 $2')
Run Code Online (Sandbox Code Playgroud)
Eug*_*ene 15
有时,camelCase 字符串包含缩写,例如:
PDFSplitAndMergeSamples
PDFExtractorSDKSamples
PDFRendererSDKSamples
BarcodeReaderSDKSamples
Run Code Online (Sandbox Code Playgroud)
在这种情况下,以下函数将起作用,它将字符串拆分为单独的字符串:
function SplitCamelCaseWithAbbreviations(s){
return s.split(/([A-Z][a-z]+)/).filter(function(e){return e});
}
Run Code Online (Sandbox Code Playgroud)
例子:
PDFSplitAndMergeSamples
PDFExtractorSDKSamples
PDFRendererSDKSamples
BarcodeReaderSDKSamples
Run Code Online (Sandbox Code Playgroud)
我发现这个问题的答案在所有情况下都不起作用,而且对于 unicode 字符串也根本不起作用,所以这里的答案可以完成所有操作,包括破折号和下划线符号分割。
\nlet samples = [\n "ThereIsWay_too MuchCGIInFilms These-days",\n "UnicodeCanBeCAPITALISEDTooYouKnow",\n "CAPITALLetters at the StartOfAString_work_too",\n "As_they_DoAtTheEND",\n "BitteWerfenSie-dieFu\xc3\x9fballeInDenM\xc3\xbcll",\n "IchHabeUberGesagtNicht\xc3\x9cber",\n "2BeOrNot2Be",\n "ICannotBelieveThe100GotRenewed. It-isSOOOOOOBad"\n];\n\nsamples.forEach(sample => console.log(sample.replace(/([^[\\p{L}\\d]+|(?<=[\\p{Ll}\\d])(?=\\p{Lu})|(?<=\\p{Lu})(?=\\p{Lu}[\\p{Ll}\\d])|(?<=[\\p{L}\\d])(?=\\p{Lu}[\\p{Ll}\\d]))/gu, \'-\').toUpperCase()));Run Code Online (Sandbox Code Playgroud)\r\n如果您不希望将数字视为小写字母,则:
\nlet samples = [\n "2beOrNot2Be",\n "ICannotBelieveThe100GotRenewed. It-isSOOOOOOBad"\n];\n\nsamples.forEach(sample => console.log(sample.replace(/([^\\p{L}\\d]+|(?<=\\p{L})(?=\\d)|(?<=\\d)(?=\\p{L})|(?<=[\\p{Ll}\\d])(?=\\p{Lu})|(?<=\\p{Lu})(?=\\p{Lu}\\p{Ll})|(?<=[\\p{L}\\d])(?=\\p{Lu}\\p{Ll}))/gu, \'-\').toUpperCase()));Run Code Online (Sandbox Code Playgroud)\r\n如果您想大写并在数字之间添加空格,这是可行的。
transform(value: string, ...args: any[]): string {
const str = 'this1IsASampleText';
str.charAt(0).toUpperCase() + value.slice(1); // Capitalize the first letter
str.replace(/([0-9A-Z])/g, ' $&'); // Add space between camel casing
}
Run Code Online (Sandbox Code Playgroud)
结果:
This 1 Is A Sample Text
Run Code Online (Sandbox Code Playgroud)