前端开发,字符串方法总结

本篇文章在工作中持续总结,方法有简单的,有实用的,但都是有效的,都是为了更好的开发,希望对各位读者有所帮助,不妨点赞,关注,收藏下,就当作是个字典表,方便随时翻阅。如有笔误,还请评论中指出,如有疑问可在下方评论。有其他好的方法,还希望在评论中多多交流,笔者也会持续增加新的方法。

所含方法

  • replace
  • split
  • padStart
  • padEnd
  • sbustr(start, len)
  • substring(start, end)
  • charAt()
  • charCodeAt()
  • indexOf
  • trim
  • repeat
  • includes
  • toUpperCase
  • toLowerCase

replace()

基本用法

js中字符串的replace方法用于替换字符串中指定的字符,基本用法如下:

str.replace(regexp|substr, newSubStr|function)

let str = 'Tom is my best friend.'

let targ = str.replace('Tom', 'money')
console.log(targ) // 'money is my best friend'

然而,当要替换的字符有多个时,上面方式往往只会替换第一个匹配到的字符。

let str = 'my friend is not your friend'

let targe = str.replace('friend', 'money')
console.log(targe) // 'my money is not your friend'

因此要全局替换时,需要使用正则

let str = 'my friend is not your friend'
// ①
let targe = str.replace(new RegExp('friend', 'g'), 'money')
// ②简写
let targe = str.replace(/friend/g, 'money')
console.log(targe) // 'my money is not your money'

split()

split根据传入的参数拆分字符串,并将拆分后的结果以数组的形式返回。简单使用:

let re = '赚,钱'.split(',')
console.log(re)  // [ '赚', '钱' ]

关于split的参数形式有很多,可以不传,传空,传正则:

var names = "Harry Trump ;Fred Barney";
var re = /\s*(?:;|$)\s*/;
var nameList = names.split(re);
console.log(nameList); // [ 'Harry Trump', 'Fred Barney' ]

以及经典的字符串逆序,也是使用了split:

const str = 'abcd';
const strReverse = str.split('').reverse().join(''); // 'dcba'

关于第二个参数,限制返回值中分割元素的数量:

let re = 'abcd'.split('', 2) 
console.log(re) // ['a', 'b']

padStart() / padEnd()

关于padStart/padEnd为ECMAScript 2017(ES8)的新增特性,分别为在字符串的前面和后面填充字符串到指定长度

let str = '10'
let re = str.padStart(4,0)
console.log(re, str) // 0010, 10

该方法返回一个新的字符串,原字符串不变。padEnd与之类似

let str = '10'
let re = str.padEnd(4,1)
console.log(re, str) // 1011, 10

关于参数的说明

  • 第一个参数指定修改后的字符串长度,第二个参数为填充内容单位。
  • 当第一个参数值小于字符串长度时,字符串不作修改
let str = '1010'
console.log(str.padEnd(3,1)) // 1010
  • 对于不支持该方法的编译环境,可以通过以下代码手动实现:
if (!String.prototype.padStart) {
    String.prototype.padStart = function padStart(targetLength,padString) {
        targetLength = targetLength>>0; //floor if number or convert non-number to 0;
        padString = String((typeof padString !== 'undefined' ? padString : ' '));
        if (this.length > targetLength) {
            return String(this);
        }
        else {
            targetLength = targetLength-this.length;
            if (targetLength > padString.length) {
                padString += padString.repeat(targetLength/padString.length); //append to original to ensure we are longer than needed
            }
            return padString.slice(0,targetLength) + String(this);
        }
    };
}

来源于MDN

sbustr() / substring()

描述:sbustr与substring比较类似

  • 相同点:当两者都是一个参数的时候,返回值为字符串该参数位置到末尾的字符串
let str = 'eqwsvwefrw12312fewf'
let sbustrStr = str.sbustr(3)
let substringStr = str.substring(3)
console.log(sbustrStr,substringStr) // 'svwefrw12312fewf'
  • 不同点:当两者都接收两个参数时,sbustr返回值是以参数1为起始位置,参数2为长度的字符串
let srt = 'asdo9djsdad'

let re = srt.substr(4,6)
console.log(re) // '9djsda'
  • 而substring则返回以参数1为起始位置,参数2为结束位置的字符串
let srt = 'asdo9djsdad'

let re = srt.substring(4,6)
console.log(re)   //  '9d'

charAt()

  • charAt(index): 参数:一个介于0 和字符串长度减1之间的整数。 (0~length-1)
    如果没有提供索引,charAt() 将使用0。
let str = 'hello world'
console.log(str.charAt(1))  //3

console.log(str.charAt(20) // ''

charCodeAt()

返回 0 到 65535 之间的整数表示给定索引处的UTF-16代码单元。及返回指定处字符的unicode编码

let str = 'abc'
console.log(str.charCodeAt(1)) //  98

如此一看是否并没有多大实际用途,那在看一个例子

let str = 'a我bc'
console.log(str.charCodeAt(1)) // 25105

在unicode编码中,大于255的为中文字符,因此,在判断字符串中是否中文的时候,该方法就特别实用了

indexOf()

indexOf() 方法返回调用它的 String 对象中第一次出现的指定值的索引,从 fromIndex 处进行搜索。如果未找到该值,则返回 -1。

str.indexOf(searchValue, index)

// 如果只传一个参数,则默认从0开始。
// 如果字符串中存在目标值,返回出现的位置,否则返回-1

let str = 'abc'

console.log(str.indexOf('a'))  // 0
console.log(str.indexOf('e'))  // -1

console.log(str.indexOf(''))  // 0  ()
console.log(str.indexOf('', 1) // 

trim()

该方法的作用是删除字符串两端的空白字符串

let str = ' abc '
console.log(str) // ' abc '
console.log(str.trim())  //  'abc'

repeat()

重复字符串,接收一个参数,指定字符串重复的次数

let str = 'abc'
console.log(str.repeat(3)) //  'abcabcabc'

includes()

类似于数组的includes方法,字符串的该方法也通过判断是否存在该字符返回true/false

let str = 'acccd'

console.log(str.includes('a'))  // true

console.log(str.includes('e')) // false

toLowerCase() 与 toUpperCase()

关于这两个方法,就放在一起写,好形成对比

  • toUpperCase(): 将字符串转换为大写字母
  • toLowerCase(): 将字符串转换为小写字母
  • 两个方法都返回一个新的字符串,原字符串不变
let str = 'aBcD'

console.log(str.toUpperCase()) //  ABCD

console.log(str.toLowerCase()) // abcd
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345