繁体   English   中英

如何使用正则表达式转换字符串而不转换为数字的字母?

[英]How to convert string but not alphabets which is in number using regex?

我正在尝试转换dynamic string ,其值可能是abcd-efgh-ijkl10.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-Ijkl10.20.AB.20.CD转换为10.20.Ab.20.Cd (我不想要)。

之前abcd-efgh-ijkl10.20.AB.20.CD

之后(使用正则表达式)Abcd-Efgh-Ijkl10.20.Ab.20.Cd

预期的解决方案Abcd-Efgh-Ijkl10.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.

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