[英]How to convert string but not alphabets which is in number using regex?
我正在尝试转换dynamic string
,其值可能是abcd-efgh-ijkl
或10.20.AB.20.CD
使用以下功能:
function toTitleCase(str) {
return str.replace(/\w+/g, function (txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
}
上面的函数可以正常工作并提供输出(我想要输入string): Abcd-Efgh-Ijkl
但10.20.AB.20.CD
转换为10.20.Ab.20.Cd
(我不想要)。
之前 : abcd-efgh-ijkl
和10.20.AB.20.CD
之后(使用正则表达式) : Abcd-Efgh-Ijkl
和10.20.Ab.20.Cd
预期的解决方案 : Abcd-Efgh-Ijkl
和10.20.AB.20.CD
请提出建议。
您可以使用:
function toTitleCase(str) { return str.replace(/\\b[A-Z0-9]{2}(?:\\.[A-Z0-9]{2})*\\b|\\b([a-zA-Z])([a-zA-Z]*)\\b/g, function (txt, $1, $2) { return $1 ? $1.toUpperCase() + $2.toLowerCase() : txt; }); } console.log(toTitleCase("abcd-efgh-ijkl")) console.log(toTitleCase("10.20.AB.20.CD")) console.log(toTitleCase("ACdf"))
细节
\\b[A-Z0-9]{2}(?:\\.[A-Z0-9]{2})*\\b
一组由点分隔的双字母数字字符,将被匹配并插入结果中照原样:
\\b
单词边界 [A-Z0-9]{2}
-2个字母或数字 (?:\\.[A-Z0-9]{2})*
-a的0+个序列.
然后是2位数字或字母 \\b
单词边界 |
- 要么 \\b
单词边界 ([az][AZ])
-第1组(用$1
):一封信 ([a-zA-Z]*)
-第2组(用$2
引用):0+ ASCII字母 \\b
单词边界。 首先,您可以进行检查以确认str
没有任何数字,然后相应地处理str
。
详细资料 :
!(/\\d+/g).test(str)
-确认没有数字 function toTitleCase(str) { return !(/\\d+/.test(str)) ? str.replace(/\\w+/g, function(txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }) : str; } console.log(toTitleCase("abcd-efgh-ijkl")) console.log(toTitleCase("10.20.AB.20.CD"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.