JS中的常用字符串方法

2020年3月2日

charAt()

返回特定位置的字符

let s = 'moking'
console.log(s.charAt(2)) // k
// 类似于[]
console.log(s[2])  //k

concat()

连接两个字符串文本,并返回一个新的字符串

let s1 = 'my name is '
let s2 = 'moking'
let s = s1.concat(s2)// my name is moking
// 类似于
s1 + s2 

//数组也可以使用这个方法拼接
let arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
let arr = arr1.concat(arr2) // [1, 2, 3, 4, 5, 6]
// 数组相加时会变转换成字符串
arr1 + arr2 // "1,2,34,5,6"

includes()

判断一个字符串里是否包含其他字符串

let s1 = 'hello world'
let s2 = 'hello'

s1.includes(s2) // true
s2.includes(s1) // false

startsWith()

判断字符串的起始位置是否匹配其他字符串中的字符

let s1 = 'hello world'
let s2 = 'hello'

s1.startsWith(s2) // true
s1.startsWith('a') // false

endsWith()

判断一个字符串的是否以给定字符串结尾,结果返回布尔值

let s1 = 'hello world'
let s2 = 'world'

s1.endsWith(s2) // true
s1.endsWith('a') // false

indexOf()和lastIndexOf()

从字符串对象中返回首个被发现的给定值的索引值,如果没有找到则返回-1。lastIndexOf()为匹配最后一个.

var s = 'mokingoo';

console.log(s.indexOf('o')) //  1
console.log(s.indexOf('a')) // -1
console.log(s.lastIndexOf('o')) //  7

match()

使用正则表达式与字符串相比较。

返回值:

  • 如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
  • 如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。 在这种情况下,返回的项目将具有如下所述的其他属性。

附加属性:

  • groups: 一个捕获组数组 或 undefined(如果没有定义命名捕获组)。
  • index: 匹配的结果的开始位置
  • input: 搜索的字符串.
var str = 'ABcmogCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
var regexp = /[A-E]/gi //全局和忽略大小写
var matches_array = str.match(regexp)

console.log(matches_array)
//  ["A", "B", "c", "C", "D", "E", "a", "b", "c", "d", "e"]

var str = '我出生 1997 年, 现在 2020 年,我马上 23 岁了';
var rex = /\d+/g  
str.match(rex)  // ["1997", "2020", "23"]
str.match('20')// 不使用正则 ["2", index: 15, input: "我出生 1997 年, 现在 2020 年,我马上 23 岁了",]

padEnd() 和 padStart()

  • padEnd() 方法会用一个字符串填充当前字符串(如果需要的话则重复填充),返回填充后达到指定长度的字符串。从当前字符串的末尾(右侧)开始填充。 padStart() 方法用另一个字符串填充当前字符串(重复,如果需要的话),以便产生的字符串达到给定的长度。填充从当前字符串的开始(左侧)应用的。

参数:

  • targetLength 当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
  • padString 填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。此参数的缺省值为 ” “
'abc'.padStart(10);         // "       abc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padStart(8, "0");     // "00000abc"
'abc'.padStart(1);          // "abc"

'abc'.padEnd(10);          // "abc       "
'abc'.padEnd(10, "foo");   // "abcfoofoof"
'abc'.padEnd(6, "123456"); // "abc123"
'abc'.padEnd(1);           // "abc"

repeat()

返回指定重复次数的由元素组成的字符串对象 参数:count介于0和正无穷大之间的整数,表示在新构造的字符串中重复了多少遍原字符串。

"abc".repeat(-1)     // RangeError: repeat count must be positive and less than inifinity
"abc".repeat(0)      // ""
"abc".repeat(1)      // "abc"
"abc".repeat(2)      // "abcabc"
"abc".repeat(3.5)    // "abcabcabc" 参数count将会被自动转换成整数.
"abc".repeat(1/0)   // RangeError: Invalid count value

replace()

被用来在正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。

const p = 'abc cba abc cba'
const regex = /abc/gi

console.log(p.replace(regex, '123'))
// 123 cba 123 cba

console.log(p.replace('abc', '321'))
// 321 cba abc cba

对正则表达式和指定字符串进行匹配搜索,返回第一个出现的匹配项的下标

const p = 'abc cba abc cba'
const regex = /abc/gi

console.log(p.search(regex))    // 0
console.log(p.search('abc'))    // 0

slice()

摘取一个字符串区域,返回一个新的字符串

const str = 'My name is Moking.'

console.log(str.slice(1)) // y name is Moking.
console.log(str.slice(5))// me is Moking.
console.log(str.slice(0, 7))// My name
console.log(str.slice(-7, -1))// Moking

split()

通过分离字符串成字串,将字符串对象分割成字符串数组

const str = 'My name is Moking'
const words = str.split(' ') 
//  ["My", "name", "is", "Moking"]
const w = str.split(' ', 2) 
//  ["My", "name"]

substring()

返回在字符串中指定两个下标之间的字符

var s = "Moking is me"
// 输出: Moking
s.substring(0,6) 
s.substring(6,0) 
s.substring(6,NaN)