JavaScript 字符串实用常用操作技巧

字符串截取

1. substring()

xString.substring(start,end)
    substring()是最常用到的字符串截取方法,它可以接收两个参数(参数不能为负值),分别是要截取的开始位置和结束位置,它将返回一个新的字符串,其内容是从start处到end-1处的所有字符。若结束参数(end)省略,则表示从start位置一直截取到最后。

let str = 'www.jeffjade.com'
console.log(str.substring(0,3)) // www
console.log(str.substring(0))   //www.jeffjade.com
console.log(str.substring(-2))  //www.jeffjade.com (传负值则视为0)

2. slice()

stringObject.slice(start, end)
    slice()方法与substring()方法非常类似,它传入的两个参数也分别对应着开始位置和结束位置。而区别在于,slice()中的参数可以为负值,如果参数是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符。

let str = 'www.jeffjade.com'
console.log(str.slice(0, 3))    // www
console.log(str.slice(-3, -1))  // co
console.log(str.slice(1, -1))   // www.jeffjade.co
console.log(str.slice(2, 1))    // '' (返回空字符串,start须小于end)
console.log(str.slice(-3, 0))   // '' (返回空字符串,start须小于end)

3. substr()

stringObject.substr(start,length)
    substr()方法可在字符串中抽取从start下标开始的指定数目的字符。其返回值为一个字符串,包含从 stringObject的start(包括start所指的字符)处开始的length个字符。如果没有指定 length,那么返回的字符串包含从start到stringObject的结尾的字符。另外如果start为负数,则表示从字符串尾部开始算起。

let str = 'www.jeffjade.com'
console.log(webStr.substr(1, 3))   // ww.
console.log(webStr.substr(0))      // www.jeffjade.com
console.log(webStr.substr(-3, 3))  // com
console.log(webStr.substr(-1, 5))  // m  (目标长度较大的话,以实际截取的长度为准)

4. split()

str.split([separator][, limit])
    separator 指定用来分割字符串的字符(串)。separator 可以是一个字符串或正则表达式。 如果忽略 separator,则返回整个字符串的数组形式。如果 separator 是一个空字符串,则 str 将会把原字符串中每个字符的数组形式返回。
    limit 一个整数,限定返回的分割片段数量。split 方法仍然分割每一个匹配的 separator,但是返回的数组只会截取最多 limit 个元素。

let str = 'www.jeffjade.com'
str.split('.')      // ["www", "jeffjade", "com"]
str.split('.', 1)   // ["www"]
str.split('.').join('') // wwwjeffjadecom
话说这个函数真心好用,很多时候的字符截取需求,就是依赖于某个字符;而以上三个函数都需知道其位置。我们当然可以借助 indexOf 等方法获取,很显然这很繁琐;而借助 split 则显得更轻而易举。

查找类方法

1. indexOf() & includes()

stringObject.indexOf(searchValue,fromIndex)
    indexOf()用来检索指定的字符串值在字符串中首次出现的位置。它可以接收两个参数,searchValue 表示要查找的子字符串,fromIndex 表示查找的开始位置,省略的话则从开始位置进行检索。

let str = 'www.jeffjade.com'
console.log(str.indexOf('.'))     // 3
console.log(str.indexOf('.', 1))  // 3
console.log(str.indexOf('.', 5))  // 12
console.log(str.indexOf('.', 12)) // -1
虽然 indexOf()用来检索指定的字符串值在字符串中首次出现的位置 ,然而很多时候,使用它的场景在于判断字符串中是否存在指定的字符串;因此代码就会如此:

if (str.indexOf('yoursPecifiedStr') !== -1) {
    // do something
}
要知道在这样的场景下,ES6 语言中的includes()就显得更优雅许多;includes() 方法用于判断一个字符串是否被包含在另一个字符串中,如果是返回true,否则返回false

str.includes(searchString[, position])

```
    searchString 将要搜寻的子字符串。position 可选。从当前字符串的哪个索引位置开始搜寻子字符串;默认为0。需要注意的是,includes() 是区分大小写的。

'Blue Whale'.includes('blue'); // returns false
'乔峰乔布斯乔帮主'.includes('乔布斯'); // returns true
if (str.includes('yoursPecifiedStr')) {
    // do something(这样写是不是更为人性化?Yeah,这是一个更趋向人性化的时代嘛)
}

lastIndexOf()

stringObject.lastIndexOf(searchValue,fromIndex)
    lastIndexOf()语法与indexOf()类似,它返回的是一个指定的子字符串值最后出现的位置,其检索顺序是从后向前。

let str = 'www.jeffjade.com'
console.log(str.lastIndexOf('.'))     // 12
console.log(str.lastIndexOf('.', 1))  // -1
console.log(str.lastIndexOf('.', 5))  // 3
console.log(str.lastIndexOf('.', 12)) // 12

2. search()

stringObject.search(substr)
stringObject.search(regexp)
    search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。它会返回第一个匹配的子字符串的起始位置,如果没有匹配的,则返回-1let str = 'www.jeffjade.com'
console.log(str.search('w'))    // 0
console.log(str.search(/j/g))   // 4
console.log(str.search(/\./g))  // 3

3. match()方法

stringObject.match(substr)
stringObject.match(regexp)
    match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

    如果参数中传入的是子字符串或是没有进行全局匹配的正则表达式,那么match()方法会从开始位置执行一次匹配,如果没有匹配到结果,则返回null。否则则会返回一个数组,该数组的第0个元素存放的是匹配文本,除此之外,返回的数组还含有两个对象属性index和input,分别表示匹配文本的起始字符索引和stringObject 的引用(即原字符串)。

let str = '#1a2b3c4d5e#';
console.log(str.match('A'));    //返回null
console.log(str.match('b'));    //返回["b", index: 4, input: "#1a2b3c4d5e#"]
console.log(str.match(/b/));    //返回["b", index: 4, input: "#1a2b3c4d5e#"]
    如果参数传入的是具有全局匹配的正则表达式,那么match()从开始位置进行多次匹配,直到最后。如果没有匹配到结果,则返回null。否则则会返回一个数组,数组中存放所有符合要求的子字符串,并且没有index和input属性。

let str = '#1a2b3c4d5e#'
console.log(str.match(/h/g))     //返回null
console.log(str.match(/\d/g))    //返回["1", "2", "3", "4", "5"]

其他方法

replace()方法

stringObject.replace(regexp/substr,replacement)
    replace()方法用来进行字符串替换操作,它可以接收两个参数,前者为被替换的子字符串(可以是正则),后者为用来替换的文本。
    如果第一个参数传入的是子字符串或是没有进行全局匹配的正则表达式,那么replace()方法将只进行一次替换(即替换最前面的),返回经过一次替换后的结果字符串。
let str = 'www.jeffjade.com'
console.log(str.replace('w', 'W'))   // Www.jeffjade.com
console.log(str.replace(/w/, 'W'))   // Www.jeffjade.com
    如果第一个参数传入的全局匹配的正则表达式,那么replace()将会对符合条件的子字符串进行多次替换,最后返回经过多次替换的结果字符串。
let str = 'www.jeffjade.com'
console.log(str.replace(/w/g, 'W'))   // WWW.jeffjade.com
toLowerCase() & toUpperCase()

stringObject.toLowerCase()
stringObject.toUpperCase()

    toLowerCase()方法可以把字符串中的大写字母转换为小写,toUpperCase()方法可以把字符串中的小写字母转换为大写。

let str = 'www.jeffjade.com'
console.log(str.toLowerCase())   // www.jeffjade.com
console.log(str.toUpperCase())   // WWW.JEFFJADE.COM

模板字符串

这是 ES6 才引入进来的新语法,来解决传统输出String模板的蹩脚问题;其功能之强大,设计之贴心,着实令人得到极大满足感,好如久旱逢甘霖一般的舒畅。更何况,在当今 MVVM 前端框架大行其道的时代,使用 ES6 语法也是不用自己个儿去操心兼容性问题,对于塑造 Dom Template 更是如虎添翼,令人爱不释手。
function ncieFunc() {
  return "四海无人对夕阳";
}
var niceMan = "陈寅恪";
var jadeTalk = `一生负气成今日 \n ${ncieFunc()} ,
语出 ${niceMan} 的《忆故居》。
`
console.log(jadeTalk)

运行之,Chrome Console 输出结果如下:

一生负气成今日
四海无人对夕阳 ,
语出 陈寅恪 的《忆故居》。

组合其法

细看 JavaScript 提供的String Api,还是有蛮多的,也有些许废弃的,也有将在未来版本会出来的;这其中不乏很多也挺有用的,譬如: charAt(x)charCodeAt(x)concat(v1, v2,…)fromCharCode(c1, c2,…) 等等,还有 ES6 对字符串的扩展,比如 字符串的遍历器接口,repeat() 等等,这可以参见 ES6-string,这里就不多赘述。

在实际代码生产中,很多时候需要用这些提供的基本方法,来打出一套组合拳,以解决其需求所需。很显然又可以借助 prototype 属性,将自造的各路拳法,其归置于 String 对象。

字符串反转


String.prototype.reverse = function () {
    return this.split('').reverse().join('')
}

去除空白行


String.prototype.removeBlankLines = function () {
    return this.replace(/(\n[\s\t]*\r*\n)/g, '\n').replace(/^[\n\r\n\t]*|[\n\r\n\t]*$/g, '')
}

String转化为数组

1, 转化为一维数组

场景是根据某子字符串转化,直接就用 split 就好;如果转换规则不统一,那么请自求多福吧。

let Str = '陈寅恪,鲁迅,钱钟书,胡适,王国维,梁启超,吴宓,季羡林'
let hallAllOfFameArr = Str.split(',')
console.log(hallAllOfFameArr)
// ["陈寅恪", "鲁迅", "钱钟书", "胡适", "王国维", "梁启超", "吴宓", "季羡林"]

2, 转化为二维数组

String.prototype.removeBlankLines = function () {
    return this.replace(/(\n[\s\t]*\r*\n)/g, '\n').replace(/^[\n\r\n\t]*|[\n\r\n\t]*$/g, '')
}
String.prototype.strTo2dArr = function(firstSplit, secondSplit){
    var contentStr = this.removeBlankLines(),
        contentStrArr = contentStr.split(firstSplit),
        resultArr = contentStrArr.map((element) => {
            return element.split(secondSplit)
        })
    return resultArr
}
var str = '
渺渺钟声出远方,依依林影万鸦藏。
一生负气成今日,四海无人对夕阳。
破碎山河迎胜利,残馀岁月送凄凉。
松门松菊何年梦,且认他乡作故乡。
'
console.log(str.strTo2dArr('\n', ','))

运行之,输出结果如下:

[ [ ‘渺渺钟声出远方’, ‘依依林影万鸦藏。’ ],
[ ‘一生负气成今日’, ‘四海无人对夕阳。’ ],
[ ‘破碎山河迎胜利’, ‘残馀岁月送凄凉。’ ],
[ ‘松门松菊何年梦’, ‘且认他乡作故乡。’ ] ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 字符串是一种常用的数据类型,它由一系列字符组成,可以用来表示文本。JavaScript提供了一些内置方法来操作字符串,包括查找字符串、替换字符串、拆分字符串等等。当然,我很乐意帮助你了解 JavaScript常用字符串方法。以下是一些常用的方法: 1. length:返回字符串的长度。 2. indexOf:返回字符串中指定字符或子串的第一次出现的位置。如果没有找到该字符或子串,则返回 -1。 3. lastIndexOf:返回字符串中指定字符或子串最后一次出现的位置。如果没有找到该字符或子串,则返回 -1。 4. charAt:返回指定位置的字符。位置从 0 开始。 5. slice:返回从指定位置开始到指定位置结束的子串。可以接受一个或两个参数。 6. substring:与 slice 方法\u4e00\u6837\uff0c\u4e5f\u53ef\u4ee5\u8fd4\u56de\u4ece\u6307\u5b9a\u4f4d\u7f6e\u5f00\u59cb\u5230\u6307\u5b9a\u4f4d\u7f6e\u7ed3\u675f\u7684\u5b50\u4e32\uff0c\u4f46\u4e0d\u80fd\u63a5\u53d7\u8fd1\u4e24\u4e2a\u53c2\u6570\uff0c\u7a0b\u5e8f\u5458\u5fc5\u987b\u81ea\u884c\u5904\u7406\u3002\n\n7. substr\uff1a\u8fd4\u56de\u6307\u5b9a\u4f4d\u7f6e\u5f00\u59cb\uff0c\u957f\u5ea6\u4e3a\u6307\u5b9a\u6570\u91cf\u7684\u5b57\u7b26\u4e32\u3002\n\n8. replace\uff1a\u4f7f\u7528\u4e00\u4e2a\u5b57\u7b26\u4e32\u66ff\u6362\u53d8\u91cf\u4e2d\u7684\u5176\u4ed6\u5b57\u7b26\u4e32\u3002\n\n9. split\uff1a\u4f7f\u7528\u4e00\u4e2a\u5b57\u7b26\u4e32\u5206\u5272\u539f\u59cb\u5b57\u7b26\u4e32\uff0c\u5e76\u8fd4\u56de\u5206\u5272\u540e\u7684\u5b57\u7b26\u4e32\u6570\u7ec4\u3002\n\n10. toLowerCase\uff1a\u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u5c0f\u5199\u5b57\u7b26\u4e32\u3002\n\n11. toUpperCase\uff1a\u5c06\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3a\u5927\u5199\u5b57\u7b26\u4e32\u3002\n\n\u4e0a\u8ff0\u65b9\u6cd5\u4e3a JavaScript \u4e2d\u5e38\u7528\u7684\u5b57\u7b26\u4e32\u65b9\u6cd5\uff0c\u53ef\u4ee5\u5bf9\u5b66\u4e60 JavaScript \u5e38\u7528\u7684\u5b57\u7b26\u4e32\u65b9\u6cd5\u8fdb\u884c\u7b80\u5355\u7684\u4e8b\u60c5\u4e2d\u5b9e\u8df5\u3002 ### 回答2: JavaScript中的字符串是由一系列字符组成的文本。在JavaScript中,字符串是一种基本的数据类型,并且在Web开发中使用得非常频繁。字符串常用方法特别重要,因为它们使得对字符串进行各种操作变得非常简单。下面是JavaScript学习手册九:字符串常用方法。 1. charAt() 该方法返回字符串中指定的位置的字符。 2. charCodeAt() 该方法返回字符串中指定字符的Unicode编码。 3. concat() 该方法用于将两个或多个字符串合并为一个新的字符串。 4. indexOf() 该方法用于查找字符串中的某个字符或子字符串,如果找到就返回该字符或子字符串的位置,否则返回-1。 5. lastIndexOf() 该方法与indexOf()方法类似,但是它是从字符串的末尾开始查找。 6. match() 该方法用于在字符串匹配一个正则表达式,并返回匹配的结果。 7. replace() 该方法用于在字符串匹配一个正则表达式,并用指定的字符串替换匹配字符串。 8. search() 该方法用于在字符串中查找指定的字符或子字符串,并返回它们的位置。 9. slice() 该方法用于截取字符串中的一部分,并返回该部分的新字符串。 10. split() 该方法用于将一个字符串分割成一个子字符串数组,并返回该数组。 11. substr() 该方法用于截取字符串中从指定位置开始的指定长度的字符串,并返回该部分的新字符串。 12. substring() 该方法与substr()方法类似,但是它是从指定的两个索引之间截取字符串。 13. toLowerCase() 该方法用于将字符串中的所有字符转换为小写字母。 14. toUpperCase() 该方法用于将字符串中的所有字符转换为大写字母。 以上就是JavaScript字符串常用方法。熟练掌握这些方法可以使得你对字符串操作变得更加便捷和高效。 ### 回答3: JavaScript 中的字符串是一组文本字符,是操作文本数据的基本方式。在 JavaScript 字符串中,有很多方法可用于处理、转换和操作字符串。以下是 JavaScript 字符串常用方法的介绍: 1. 字符串长度: 使用字符串的 length 属性可以获取字符串的长度,如: "hello world".length。 2. 字符串索引: 字符串中的每个字符都可以通过其索引访问。使用 charAt(index) 方法可以返回指定位置的字符,如:"hello".charAt(1)。 3. 字符串连接: 可以通过 + 运算符将两个字符串连接起来,并返回一个新的字符串。如:"hello" + "world"。 4. 字符串查找: 使用 indexOf(str) 和 lastIndexOf(str) 方法可以查找字符串中指定子字符串的位置。其中,indexOf() 方法从字符串的开头开始查找,lastIndexOf() 方法从结尾开始查找,如:"hello world".indexOf("l")。 5. 字符串替换: 使用 replace(subStr, replaceStr) 方法可以将字符串中的子字符串替换为指定字符串,并返回一个新的字符串。如:"hello".replace("h", "H")。 6. 字符串转换: 使用 toUpperCase() 和 toLowerCase() 方法可以将字符串转换为大写或小写字母形式,如:"HeLLo".toUpperCase()。 7. 字符串分割: 使用 split(separator) 方法可以将字符串分割成一个数组,其中 separator 是分割符,如:"hello world".split(" ")。 8. 字符串裁剪: 使用 slice(start, end) 方法可以截取字符串的一部分,并返回一个新的字符串,其中 start 是开始索引,end 是结束索引,如:"hello world".slice(0, 5)。 以上是 JavaScript 字符串常用的方法。熟练掌握这些方法,能够更加灵活、高效地操作字符串,在开发中发挥更大的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值