16JS切换字母大小写
Posted 天界程序员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了16JS切换字母大小写相关的知识,希望对你有一定的参考价值。
JS切换字母大小写
- 输入一个字符串,切换其中字母的大小写
- 如:12aBc34, 输出:12AbC34
常见思路
- 正则表达式匹配
- ASCII编码匹配
代码实现
- 正则表达式
export function switchLetterCase1 (str:string):string
let res = ''
const len = str.length
if(len === 0) return res
const reg1 = /[a-z]/
const reg2 = /[A-Z]/
for (let i = 0; i < len; i++)
const c = str[i]
if (reg1.test(c))
res += c.toUpperCase()
else if (reg2.test(c))
res += c.toLowerCase()
else
res += c
return res
- ASCII 码方式
export function switchLetterCase2 (str:string):string
let res = ''
const len = str.length
if(len === 0) return res
for (let i = 0; i < len; i++)
const c = str[i]
const code = c.charCodeAt(0)
if (code >= 97 && code <= 122)
res += c.toUpperCase()
else if (code >= 65 && code <= 90)
res += c.toLowerCase()
else
res += c
return res
功能测试
const s = '12aBc34'
switchLetterCase1(s)
switchLetterCase2(s)
打印结果
12AbC34
12AbC34
单元测试
describe('字母大小写切换',() =>
it('正常情况', () =>
const s = '12aBc34'
expect(switchLetterCase1(s)).toBe('12AbC34')
expect(switchLetterCase2(s)).toBe('12AbC34')
)
it('空字符串', () =>
expect(switchLetterCase1('')).toBe('')
expect(switchLetterCase2('')).toBe('')
)
it('非字母', () =>
expect(switchLetterCase1('121215你好')).toBe('121215你好')
expect(switchLetterCase2('121215你好')).toBe('121215你好')
)
)
性能测试
console.time('switchLetterCase1')
for (let i = 0; i < 100 * 10000; i++)
switchLetterCase1(s)
console.timeEnd('switchLetterCase1')
console.time('switchLetterCase2')
for (let i = 0; i < 100 * 10000; i++)
switchLetterCase2(s)
console.timeEnd('switchLetterCase2')
打印结果
switchLetterCase1: 3.007s
switchLetterCase2: 1.356s
ASCII 码优于 正则表达式
性能分析
- 使用正则表达式,性能较差
- 使用ASCII码判断,性能较好——推荐答案
总结
- 慎用正则表达式
- 常见字符的ASCII码
- 增加知识广度,可以更快的思考解决问题的方法
以上是关于16JS切换字母大小写的主要内容,如果未能解决你的问题,请参考以下文章
js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位
js密码正则表达式:要求包含大小写字母、数字和特殊符号,8~16位
js 正则 以字母开头必须有 大小写字母数字组成 可以有“@"或 ”.“