字符串常用方法

字符串属于Javascript中基本数据类型的一种。用于表示由0个或多个16位Unicode字符组成的字符序列

字符串可以用双引号包裹,也可以用单引号包裹。但是注意一定要左右两边都是双引号或单引号。

字符串通常使用字面量表示即可,例如:

const str = 'Hello Gary'

此时就声明了一个字符串。

一些特殊的字面量

可以通过转义字符 \反斜杠 来表示一些特殊的字面量

\n换行
\t水平制表符
\b空格
\r回车
\f换页
\\表示一个反斜杠\
表示一个单引号,在单引号包裹的字符串中使用,避免字符串提前结束
"表示一个双引号
\xnn表示16进制码nn代表的一个字符(n的范围0-F)。例如 \x41表示“A”
\unnnn表示16进制码nnnn代表的一个Unicode字符(n的范围0-F)。例如\u03a3表示希腊字符Σ

字符串的长的可以通过其length属性访问,返回该字符串包含的16位字符的数目

console.log('Gary lalala'.length)   //11 空格会算在里面

字符串常用操作

indexOf()方法

返回调用它的字符串的第一次出现指定值的索引,区分大小写

语法:

str.indexOf(searchVal , [, fromIndex])

接收两个参数:

​ 1、searchVal 要查找的字符串,如果不传,默认是‘undefined’

​ 2、fromIndex 数字下标,即从字符串指定位置开始查找,默认值是0,即从下标0出开始查找,可不传

返回值:

​ 返回查找的字符串第一次出现的索引,如果没有找到,则返回-1

'Gary lalala'.indexOf('la')  //返回5
'Gary lalala'.indexOf('la',6)  //返回7
'Gary lalala'.indexOf('lay')  //返回-1
'Gary lalala'.indexOf('Gary')  //返回0
'Gary lalala'.indexOf('gary') //返回false

注意: 返回0同样表示字符串包含searchVal,但不是true,因此进行判断时

'Gary lalala'.indexOf('Gary') !== -1  //这样更准确
!!'Gary lalala'.indexOf('Gary')    //false

lastIndexOf()方法

类似indexOf()方法,只不过是从str.length-1处,从后向前找,其余都相同

使用indexOf统计一个字符串中某个字母出现的次数
const str = 'Stupid is as stupid does';

let count = 0;
let pos = str.indexOf('s');

while (pos !== -1) {
    count++;
    pos = str.indexOf('s', pos + 1);
}

console.log(count);   //4

charAt()方法

语法:

str.charAt(index)

​ 用于根据指定下标返回字符串中指定字符,效果同str[index]

参数:

​ index 范围:0到str.length-1,如果不传,默认为0,如果传入的值大于str.length-1,则返回一个空字符串

const str = 'Hello'
str.charAt(1)  // 'e'
str.chatAt()  str.charAt(0)  //'H'
str.charAt(5)  // ''

includes()方法

语法:

str.includes(searchString[, position])

参数:

​ searchString 要在此字符串中搜索的字符串

​ position 可不传,表示从当前字符串的那个索引位置开始搜索字符串,默认为0

用于判断一个字符串中是否包含指定字符串,返回的是布尔值,该方法同样区分大小写

'Gary lalala'.includes('Gary')  //true

endsWith()方法

语法:

str.endsWith(searchString[, length])

参数:

​ searchString 要搜索的子字符串

​ length 作为str的长度,可不传,默认值为str.length

作用:判断str是不是以传入的子字符串结尾,返回值是一个布尔值,同样区分大小写

const str = 'Life was like a box of chocolates'
console.log(str.endsWith('chocolates'))  //true
console.log(str.endsWith('es'))  //true
console.log(str.endsWith('was'))  //false
console.log(str.endsWith('was',8))  //true

match()方法

语法:

str.match(regexp)

参数:

​ regexp 一个正则表达式。 如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 正则表达式 。如果没有传递参数而直接使用match,会得到一 个包含空字符串的 数组:[""] 。

返回值:

​ 如果参数使用了g标志,则返回与完整正则表达式匹配的所有结果,不会返回捕获组

​ 如果未使用g标志,则返回第一个完整匹配及其相关的捕获组,且返回的数组具有以下属性:

​ groups: 一个捕获数组或undefined(如果没有定义命名捕获组)

​ index:匹配结果的开始位置

​ input:搜索的字符串

​ 一个数组,内用取决于传入的正则表达式g标志是否存在,如果未匹配到结果则返回null

例: 使用 match 查找 “Chapter” 紧跟着 1 个或多个数值字符,再紧跟着一个小数点和数值字符 0 次或多次。正则表达式包含 i 标志,因此大小写会被忽略。

var str = 'For more information, see Chapter 3.4.5.1';
var re = /see (chapter \d+(\.\d)*)/i;
var found = str.match(re);

console.log(found);

// 'see Chapter 3.4.5.1' 是整个匹配。
// 'Chapter 3.4.5.1' 被'(chapter \d+(\.\d)*)'捕获。
// '.1' 是被'(\.\d)'捕获的最后一个值。
// 'index' 属性(22) 是整个匹配从零开始的索引。
// 'input' 属性是被解析的原始字符串。

在这里插入图片描述

使用g和i标志:

var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);

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

repeat()方法

语法:

str.repeat(count)

参数:

​ count 介于0到 +Infinity之间的整数, 表示在新构造的字符串中重复了多少遍原字符串。

返回值:

​ 包含指定字符串的指定数量副本的新字符串。

"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: repeat count must be positive and less than inifinity

replace()方法

replace() 方法返回一个由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern是字符串,则仅替换第一个匹配项。

语法:

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

参数:

​ 正则表达式(pattern) 该正则匹配到的内容会被第二个参数的返回值替换掉

​ 字符串(pattern) 一个将被newSubStr替换掉的字符串,只有第一个匹配项会被替换掉

​ 新的字符串(replacement) 新的字符串,用于替换原字符串中匹配到的内容。该字符串中可以插入一些特殊的变量名,见下表

​ 回调函数(replacement)一个用来创建新字符串的函数,该函数的返回值将会替换掉第一个匹配到的结果

替换字符可以插入的特殊变量名
变量名代表的值
$$插入一个 “$”。
$&插入匹配的子串。
$`插入当前匹配的子串左边的内容
$’插入当前匹配的子串右边的内容。
$n假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。提示:索引是从1开始。如果不存在第 n个分组,那么将会把匹配到到内容替换为字面量。比如不存在第3个分组,就会用“$3”替换匹配到的内容。
$这里*Name* 是一个分组名称。如果在正则表达式中并不存在分组(或者没有匹配),这个变量将被处理为空字符串。只有在支持命名分组捕获的浏览器中才能使用。
当替换值是一个函数时

当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。 (注意:上面提到的特殊替换参数在这里不能被使用。) 另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用。

以下是该函数的参数:

变量名代表的值
match匹配的子串。(对应于上述的$&。)
p1,p2, …假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)例如,如果是用 /(\a+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+p2 就是匹配的 \b+
offset匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1)
tring匹配的原字符串。
NamedCaptureGroup命名捕获组匹配的对象

例:

function replacer(match, p1, p2, p3, offset, string) {
  // p1 is nondigits, p2 digits, and p3 non-alphanumerics
  return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString);  // abc - 12345 - #$*%

在replace()中使用正则表达式:

const str = 'Balabala';
const newStr = str.replace(/ba/gi , 'CA');
console.log(newStr)   //'CAlaCAla'

交换字符串中的两个单词:

var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");

console.log(newstr);  // Smith, John

search()方法

语法:

str.search(regexp)

参数:

​ 一个正则表达式。如果传入的参数不是正则表达式,会使用new Regexp(regexp)隐式将其转为正则表达式

返回值:

​ 如果匹配成功,则返回正则表达式在字符串中首次匹配项的索引,否则返回-1

例:

var str = "hey JudE";
var re = /[A-Z]/g;
var re2 = /[.]/g;
console.log(str.search(re)); // returns 4  匹配到'J'
console.log(str.search(re2)); // returns -1 

slice()方法

语法:

str.slice(beginIndex[, endIndex]);

参数:

​ beginIndex 传入一个数字,表示从原始字符串的改下标处开始提取。如果传入负数,则会经过str.length+该负数处理

​ endIndex 到该下标处结束提取字符串。如果不传,则默认提取到字符串最后一位。同样的如果传入负数,则会经过str.length+该负数处理

返回值:

​ 返回一个从原字符串提取出来的新字符串,不改变原字符串

例:

var str1 = 'The morning is upon us.', // str1 的length是23。
    str2 = str1.slice(1, 8),
    str3 = str1.slice(4, -2),
    str4 = str1.slice(12),
    str5 = str1.slice(30);
console.log(str2); // 输出:he morn
console.log(str3); // 输出:morning is upon u
console.log(str4); // 输出:is upon us.
console.log(str5); // 输出:""

传入负值:

var str = 'The morning is upon us.';
str.slice(-3);     // 返回 'us.'
str.slice(-3, -1); // 返回 'us'
str.slice(0, -1);  // 返回 'The morning is upon us'

split()方法

语法

str.split([separator[, limit]])

参数:

​ separator 以该参数作为拆分字符串标准,可以是一个字符串或正则表达式。如果是一个空字符串,则将str原字符串中的每个字符以数组形式返回

​ limit 一个整数,限定分割片段数量,表示数组中最多能放几项,大于limit的内容会被忽略

返回值:

​ 返回原字符串以分隔符出现位置分割而成的一个数组

例:

const str = 'lalalalal';
const sArr = str.split('a');
const sArr1 = str.split('a',3);
console.log(sArr);  //["l", "l", "l", "l", "l"]
console.log(sArr1)  //["l", "l", "l"]

移除字符串中的空格:

split() 方法会查找“0 或多个空白符接着的分号,再接着 0 或多个空白符”模式的字符串,找到后,就将空白符从字符串中移除,nameListsplit 的返回数组

var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand ";

var re = /\s*(?:;|$)\s*/;
var nameList = names.split(re);

console.log(nameList);  //["Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand", ""]

限定返回值来分割元素数量

var myString = "Hello World. How are you doing?";
var splits = myString.split(" ", 3);  //以空格分割原数组

console.log(splits);  //["Hello", "World.", "How"]

字符串反转

const str = 'abcdef';
const strReverse = str.split('').reverse().join('');
console.log(strReverse) //'fedcba'

substr()方法

语法:

str.substr(start[,length])

参数:

​ start 开始提取字符的位置。如果传入负数,则会经过str.length + start处理,如果处理后的值为负数,则从小标0处开始截取

​ length 可不传,提取的字符串长度。如果为0或负数,则返回一个空字符串。不传默认截取到字符串结束

返回一个字符串中从指定位置开始截取指定字符数的字符串

例:

const str = 'abcdefg'
console.log(str.substr(0)) //'abcdefg'
console.log(str.substr(1,3)) // 'bcd'
console.log(str.substr(-3 , 2)) // 'ef'
console.log(str.substr(-30 , 2)) // 'ab'

substring()方法

语法:

str.substring(startIndex[, endIndex])

参数:

​ startIndex 需要截取的第一个字符的索引,从该位置开始(包含该位置)截取字符串

​ endIndex 可选,0到字符串长度之间的整数,截取的字符串不包含改下标字符

包前不包后

返回值:

​ 返回一个包含给定字符串的指定部分的新字符串

注意:

​ 如果startIndex 等于 endIndex 则返回空字符串

​ 如果不传endIndex,则一直截取到字符串结束位置

​ 任意一项小于0或为NaN,都会被认为是0

​ 任一项大于str.length,都被认为是str.length

​ 如果startIndex > endIndex 则会将两个参数替换

例:

var anyString = "Mozilla";

// 输出 "Moz"
console.log(anyString.substring(0,3));
console.log(anyString.substring(3,0));
console.log(anyString.substring(3,-3));
console.log(anyString.substring(3,NaN));
console.log(anyString.substring(-2,3));
console.log(anyString.substring(NaN,3));

// 输出 "lla"
console.log(anyString.substring(4,7));
console.log(anyString.substring(7,4));

// 输出 ""
console.log(anyString.substring(4,4));

// 输出 "Mozill"
console.log(anyString.substring(0,6));

// 输出 "Mozilla"
console.log(anyString.substring(0,7));
console.log(anyString.substring(0,10));

结合字符串长度使用:

var anyString = 'Mozilla';
var anyString4 = anyString.substring(anyString.length - 4);
console.log(anyString4);  // 'illa'

var anyString = 'Mozilla';
var anyString5 = anyString.substring(anyString.length - 5);
console.log(anyString5);  //'zilla'

替换一个字符串的子字符串

function replaceString(oldS, newS, fullS) {
// Replaces oldS with newS in the string fullS
  for (var i = 0; i < fullS.length; i++) {
    if (fullS.substring(i, i + oldS.length) == oldS) {
     fullS = fullS.substring(0, i) + newS + fullS.substring(i + oldS.length, fullS.length);
    }
  }
  return fullS;
}

replaceString("World", "Web", "Brave New World");

toLowerCase()方法

语法:

str.toLowerCase()

返回一个全部是小写字母的新字符串

const str = 'ABCdef';
const lowStr = str.toLowerCase();
console.log(lowStr)  //'abcdef'

toUpperCase()方法

语法:

str.toUpperCase()

返回一个全部是大写字母的新字符串

const str = 'ABCdef';
const lowStr = str.toLowerCase();
console.log(lowStr)  // 'ABCDEF'

trim()方法

语法:

str.trim()

从一个字符串的两端删除空白字符。在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符(如 LF,CR等)

返回一个原字符串两端去掉空白的新字符串

var orig = '   foo  ';
console.log(orig.trim()); // 'foo'

var orig = 'foo    ';
console.log(orig.trim()); // 'foo'

在不支持trim()的环境中兼容

if (!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
  };
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值