zoukankan      html  css  js  c++  java
  • JavaScript中String字符串方法总结

    JavaScript中String字符串方法总结

    1. JavaScript中String字符串方法总结

    2. JavaScript中Array数组方法总结

    3. JavaScript中Object对象方法总结

    方法 是否修改原始值 是否有返回值 描述
    concat() 连接两个或更多字符串,并返回新的字符串。
    toLowerCase() 把字符串转换为小写。
    toUpperCase() 把字符串转换为大写。
    toString() 返回一个字符串。
    charAt() 返回在指定位置的字符。
    charCodeAt() 返回在指定的位置的字符的 Unicode 编码。
    fromCharCode() 将 Unicode 编码转为字符。
    indexOf() 返回某个指定的字符串值在字符串中首次出现的位置。
    lastIndexOf() 从后向前搜索字符串,并从起始位置(0)开始计算返回字符串最后出现的位置。
    substring() 提取字符串中两个指定的索引号之间的字符。
    slice() 提取字符串的片断,并在新的字符串中返回被提取的部分。
    substr() 从起始索引号提取字符串中指定数目的字符。
    split() 把字符串分割为字符串数组。
    match() 查找找到一个或多个正则表达式的匹配。返回一个数组或者null。
    replace() 在字符串中查找匹配的子串,并替换与正则表达式匹配的子串,默认只能替换第一次匹配,想替换全部,需要使用正则表达式的g模式。返回新字符串。
    replaceAll() 在字符串中查找匹配的子串,并替换与正则表达式匹配的子串,只能全部替换。返回新字符串。
    search() 查找与正则表达式相匹配的值。返回下标。
    includes() 查找字符串中是否包含指定的子字符串,返回布尔值。
    startsWith() 查看字符串是否以指定的子字符串开头,返回布尔值。
    endsWith() 判断当前字符串是否是以指定的子字符串结尾的(区分大小写),返回布尔值。
    repeat() 复制字符串指定次数,并将它们连接在一起返回。返回新字符串。
    toLocaleLowerCase() 根据本地主机的语言环境把字符串转换为小写。
    toLocaleUpperCase() 根据本地主机的语言环境把字符串转换为大写。
    valueOf() 返回某个字符串对象的原始值。
    padStart() 如果某个字符串不够指定长度,会在头部补全。返回新字符串。
    padEnd() 如果某个字符串不够指定长度,会在尾部补全。返回新字符串。
    trim() 去除字符串两边的空白。返回新字符串。
    trimStart() 消除字符串头部的空格,除了空格键,方法对字符串头部(或尾部)的 tab 键、换行符等不可见的空白符号也有效。返回新字符串。
    trimEnd() 消除尾部的空格,除了空格键,方法对字符串头部(或尾部)的 tab 键、换行符等不可见的空白符号也有效。返回新字符串。
    at() 方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置)。

    方法解析

    代码没有特殊标注情况下,本文环境均是在Chrome环境下测试输出

    string.concat() : 连接两个或更多字符串,并返回新的字符串。原始值不变。

    写法麻烦,一般直接使用 加号拼接,效果一样

    
    
            let str1 = 'asdfgh';
            let str2 = 123456;
            let str3 = 'zxcvbn';
            // zxcvbnasdfgh123456
            console.log( str3.concat( str1, str2 ) );
    
    

    string.toLowerCase() : 把字符串转换为小写。原始值不变。

    
            let str1 = 'ASDFGH';
            // asdfgh ------- ASDFGH
            console.log( str1.toLowerCase(), '-------', str1 );
    
    

    string.toUpperCase() : 把字符串转换为大写。原始值不变。

    
            let str1 = 'asdfgh';
            // ASDFGH ------- asdfgh
            console.log( str1.toUpperCase(), '-------', str1 );
    
    

    string.toString() : 返回一个字符串。原始值不变。

    null和undefined没有这个方法,会报错

            let str1 = [1,'name'];
            // 输出 字符串,数组
            // 1,name  -------  [1, 'name']
            console.log( str1.toString(), '-------', str1 );
    
    
            let str2 = false;
            // 输出 字符串,布尔值
            // false  -------  false
            console.log( str2.toString(), '-------', str2 );
    
    
            let str3 = { name:1 };
            // 输出 字符串,布尔值
            // [object Object] ------- {name: 1}
            console.log( str3.toString(), '-------', str3 );
    

    string.charAt() : 返回下标位置的字符串。原始值不变。

    1. 默认值是0,可以不传下标
    2. 赋值或大于字符串长度,返回空
    
            let str1 = 'asdfgh';
            // g ------- a -------  -------  ------- asdfgh
            console.log( str1.charAt(4), '-------', str1.charAt(), '-------', str1.charAt(-5), '-------', str1.charAt(10), '-------',str1 );
    

    string.charCodeAt() : 返回在指定的位置的字符的 Unicode 编码。原始值不变。

    1. 默认值是0,可以不传下标
    2. 赋值或大于字符串长度,返回空
    
    
            let str1 = 'asdfgh';
            // 103 '-------' 97 '-------' NaN '-------' NaN '-------' 'asdfgh'
            console.log( str1.charCodeAt(4), '-------', str1.charCodeAt(), '-------', str1.charCodeAt(-5), '-------', str1.charCodeAt(10), '-------',str1 );
    
    

    string.fromCharCode() : 将 Unicode 编码转为字符。原始值不变。

    
            // 将Unicode 编码汉字打印出来
            for(var i=0x4e00; i<=0x9fa5; i++){
                console.log(String.fromCharCode(i));
            }
    
    

    string.indexOf() : 返回某个指定的字符串值在字符串中首次出现的位置。原始值不变。

    1. 区分大小写
    2. 如果找到了就不再继续找了,如果没找到,返回-1
    3. 从左往右
    
            let str1 = 'asdfgh';
            // 4 '-------' 1 '-------' -1 '-------' 'asdfgh'
            console.log( str1.indexOf('g'), '-------', str1.indexOf('sd'), '-------', str1.indexOf('e'), '-------',str1 );
    
    

    string.lastIndexOf() : 从后向前搜索字符串,并从起始位置(0)开始计算返回字符串最后出现的位置。原始值不变。

    1. 区分大小写
    2. 如果找到了就不再继续找了,如果没找到,返回-1
    3. 从右往左
    
            let str1 = 'asdfgh';
            // 4 '-------' 1 '-------' -1 '-------' 'asdfgh'
            console.log( str1.lastIndexOf('g'), '-------', str1.lastIndexOf('sd'), '-------', str1.lastIndexOf('e'), '-------',str1 );
    
    

    string.substring( index1, index2 ) : 提取字符串中两个指定的索引号之间的字符,包含开始位置,不包含结束位置。原始值不变。

    1. 自动将负数转换成0,将大于str长度的转换成str长度
    2. 两个参数不管顺序如何,始终以小数字为开始,大数字为结束
    3. 两个参数都不传,就是完整字符串
    4. 如果两个参数都是负数或者两个参数都大于str长度,截取的内容都是空
    5. 如果一个正数一个负数就是整个字符串
    6. 只传一个参数,一直截取到最后,如果是负数,转换成0,如果大于str长度,就截空
            let str1 = 'asdfgh';
            // df
            console.log( str1.substring( 2, 4 ) );
            // asdf
            console.log( str1.substring( -2, 4 ) );
            // as
            console.log( str1.substring( 2, -4 ) );
            // dfgh
            console.log( str1.substring( 2 ) );
            // asdfgh
            console.log( str1.substring(  ) );
    
    

    string.slice( start, end ) : 提取字符串的片断,并在新的字符串中返回被提取的部分。原始值不变。

    1. 自动将传入的负值与字符串的长度相加
    2. end参数小于start参数的话,返回空字符串
    
            let str1 = 'asdfghjkl';
            // df
            console.log( str1.slice( 2, 4 ) );
            // 
            console.log( str1.slice( -2, 4 ) );
            // dfg
            console.log( str1.slice( 2, -4 ) );
    
    

    string.substr( start, num ) : 从起始索引号提取字符串中指定数目的字符。原始值不变。

    1. start开始位置,num参数指定的则是返回的字符个数。如果没有给方法传递num参数,则将字符串的长度作为结束位置
    2. 自动将负数的start参数加上字符串的长度,将负数的第num参数转换为0
    
            let str1 = 'asdfgh';
            // dfgh
            console.log( str1.substr( 2, 4 ) );
            // gh
            console.log( str1.substr( -2, 4 ) );
            // 
            console.log( str1.substr( 2, -4 ) );
            // dfgh
            console.log( str1.substr( 2 ) );
            // asdfgh
            console.log( str1.substr(  ) );
    
    

    string.split() : 把字符串分割为字符串数组。原始值不变。

    1. 没找到字符,就返回完整字符串
    2. 旧浏览器不传值会将每一个字母都且分开,现在是翻红完整字符串
    
            let str1 = 'as_d_fgh';
            // ['as', 'd', 'fgh']
            console.log( str1.split( '_' ) );
            // ['as_d_fgh']
            console.log( str1.split( '.' ) );
            // ['as_d_fgh']
            console.log( str1.split() );
    
    

    string.includes() : 查找字符串中是否包含指定的子字符串,返回布尔值。原始值不变。

    string.startsWith() : 查看字符串是否以指定的子字符串开头,返回布尔值。原始值不变。

    string.endsWith() : 判断当前字符串是否是以指定的子字符串结尾的(区分大小写),返回布尔值。原始值不变。

    1. 这三个方法都支持第二个参数,includes、startsWith表示开始搜索的位置直到字符串结束;endsWith参数代表个数(n),从字符串开始的前n个字符
    
            let str1 = 'Hello world!';
            // true
            console.log( str1.startsWith( 'Hello' ) );
            // true
            console.log( str1.endsWith( '!' ) );
            // true
            console.log( str1.includes( 'o' ) );
    
            // false
            console.log( str1.startsWith( 'Hello', 6 ) );
            // false
            console.log( str1.endsWith( '!', 5 ) );
            // true
            console.log( str1.includes( 'o', 6 ) );
    
            // false
            console.log( str1.startsWith( 'Hello', 55 ) );
            // true
            console.log( str1.endsWith( '!', 55 ) );
            // false
            console.log( str1.includes( 'o', 55 ) );
    
            // true
            console.log( str1.startsWith( 'Hello', -6 ) );
            // false
            console.log( str1.endsWith( '!', -5 ) );
            // true
            console.log( str1.includes( 'o', -6 ) );
    
    

    string.match() : 查找找到一个或多个正则表达式的匹配。返回一个数组。原始值不变。

    1. 如果没有符合条件,返回null
    2. regexp没有标志g,match方法就只能在str中执行一次匹配,没有找到匹配文本就返回null,如果匹配到了,就返回一个数组存放了与匹配到文本有关的信息,数组的第0项是与regexp匹配的文本,第1项是匹配到文本的起始字符位置,第2项是str字符串。
    3. regexp如果有g,mantch 方法执行全局检索,没有就返回null,有就返回匹配到的所有字符串,是一个数组
    
            let str1 = '2017-07-03';
            let regDate = /^(\d{1,4})-(\d{1,2})-(\d{1,2})$/;
            // ['2017-07-03', '2017', '07', '03', index: 0, input: '2017-07-03', groups: undefined]
            // 先返回完整正则匹配信息,再依次返回分组信息,然后返回文本的起始字符的位置,然后是str的完整字符串
            console.log(str1.match(regDate));
            
            let regDate2 = /^(\d{1,4})-(\d{1,2})-(\d{1,2})$/g;
            // ['2017-07-03']
            console.log(str1.match(regDate2));
    
    

    string.replace() : 在字符串中查找匹配的子串,并替换与正则表达式匹配的子串,默认只能替换第一次匹配,想替换全部,需要使用正则表达式的g模式。返回新字符串。原始值不变。

    
            // str.replace(旧符号,新符号); 把str中的%替换成#
            let str1 = '20%,50% OFF de Desconto 20%,50%Lancheiras';
    
            // 只替换一次
            // 20#,50% OFF de Desconto 20%,50%Lancheiras
            console.log(str1.replace( '%', '#'));
    
            // 正则可以批量替换
            // 20#,50# OFF de Desconto 20#,50#Lancheiras
            console.log(str1.replace( /\%/g, '#'));
    
            let newStr=str1.replace( /\d{2}\%/g, function( item, index ){
                let tmp = '';
                tmp='<i>' + item + '</i>';
                return tmp;
            });
    
            // 正则与函数配合,进行复杂替换
            // <i>20%</i>,<i>50%</i> OFF de Desconto <i>20%</i>,<i>50%</i>Lancheiras
            console.log(newStr);
    
    

    string.replaceAll(searchValue, replacement) :在字符串中查找匹配的子串,并替换与正则表达式匹配的子串,只能全部替换。返回新字符串。原始值不变。

    1. searchValue是搜索模式,可以是一个字符串,也可以是一个全局的正则表达式(带有g修饰符),正则表达式不带g,程序会报错。
    2. replacement是一个字符串,表示替换的文本,其中可以使用一些特殊字符串。
      • $&:匹配的字符串。
      • $&:匹配的字符串。
      • $ ` :匹配结果前面的文本。
      • $':匹配结果后面的文本。
      • $n:匹配成功的第n组内容,n是从1开始的自然数。这个参数生效的前提是,第一个参数必须是正则表达式。
      • $$:指代美元符号$。
    3. replacement除了为字符串,也可以是一个函数,该函数的返回值将替换掉第一个参数searchValue匹配的文本。
      • 第一个参数是捕捉到的匹配内容
      • 第二个参数捕捉到是组匹配(有多少个组匹配,就有多少个对应的参数)。
      • 倒数第二个参数是捕捉到的内容在整个字符串中的位置
      • 最后一个参数是原字符串。
            // str.replace(旧符号,新符号); 把str中的%替换成#
            let str1 = '20%,50% OFF de Desconto 20%,50%Lancheiras';
    
            // 全部替换
            // 20#,50# OFF de Desconto 20#,50#Lancheiras
            console.log(str1.replaceAll( '%', '#'));
    
    
    // $& 表示匹配的字符串,即`b`本身
    // 所以返回结果与原字符串一致
    'abbc'.replaceAll('b', '$&')
    // 'abbc'
    
    // $` 表示匹配结果之前的字符串
    // 对于第一个`b`,$` 指代`a`
    // 对于第二个`b`,$` 指代`ab`
    'abbc'.replaceAll('b', '$`')
    // 'aaabc'
    
    // $' 表示匹配结果之后的字符串
    // 对于第一个`b`,$' 指代`bc`
    // 对于第二个`b`,$' 指代`c`
    'abbc'.replaceAll('b', `$'`)
    // 'abccc'
    
    // $1 表示正则表达式的第一个组匹配,指代`ab`
    // $2 表示正则表达式的第二个组匹配,指代`bc`
    'abbc'.replaceAll(/(ab)(bc)/g, '$2$1')
    // 'bcab'
    
    // $$ 指代 $
    'abc'.replaceAll('b', '$$')
    // 'a$c'
    
    'aabbcc'.replaceAll('b', () => '_')
    // 'aa__cc'
    
    const str = '123abc456';
    const regex = /(\d+)([a-z]+)(\d+)/g;
    
    function replacer(match, p1, p2, p3, offset, string) {
      return [p1, p2, p3].join(' - ');
    }
    
    str.replaceAll(regex, replacer)
    // 123 - abc - 456
    
    
    // 上面例子中,正则表达式有三个组匹配,所以replacer()函数的第一个参数match是捕捉到的匹配内容(即字符串123abc456),后面三个参数p1、p2、p3则依次为三个组匹配。
    

    string.search() : 查找与正则表达式相匹配的值首次出现的位置。原始值不变。跟indexOf功能一模一样,但是search方法的参数是正则表达式

    
            let str1 = 'ancHLeiras';
            let reg = /a/i;
            let reg2 = /h/i;
            // 0
            console.log(str1.indexOf( 'a' ));
            // 0
            console.log(str1.search( reg ));
    
            // -1
            console.log(str1.indexOf( 'h' ));
            // 3
            console.log(str1.search( reg2 ));
    
    

    string.repeat() : 复制字符串指定次数,并将它们连接在一起返回。返回新字符串。原始值不变。

    1. 参数如果是小数,会被取整。
    2. 参数是负数或者Infinity,会报错。
    3. 参数是字符串,则会先转换成数字。
    
            let str1 = 'hello';
            
            // hellohello ----- hello
            console.log(str1.repeat( 2 ), '-----', str1 );
    
    

    string.padStart() : 如果某个字符串不够指定长度,会在头部补全。返回新字符串。原始值不变。

    string.padEnd() : 如果某个字符串不够指定长度,会在尾部补全。原始值不变。

            let a = 'x';
            let a1 = a.padStart(5, 'ab');
            console.log(a, a1); // 'x' 'ababx'
    
            let b = 'x';
            let b1 = b.padStart(4, 'ab');
            console.log(b, b1); // 'x' 'abax'
    
            let c = 'x';
            let c1 = c.padEnd(5, 'ab');
            console.log(c, c1); // 'x' 'xabab'
    
            let d = 'x';
            let d1 = d.padEnd(4, 'ab');
            console.log(d, d1); // 'x' 'xaba'
    
    

    string.trim() : 去除字符串两边的空白。返回新字符串。原始值不变。

    1. 空白符包括:空格、制表符 tab、换行符等其他空白符等。
    2. 不适用于 null, undefined, Number 类型。
    
            let str1 = '      hel   lo     ';
            
            // |hel   lo|
            console.log( '|' + str1.trim() + '|' );
    
    

    string.trimStart() : 消除字符串头部的空格,返回新字符串。

    1. 空白符包括:空格、制表符 tab、换行符等其他空白符等。
    2. 不适用于 null, undefined, Number 类型。

    string.trimEnd() : 消除尾部的空格,返回新字符串。

    1. 空白符包括:空格、制表符 tab、换行符等其他空白符等。
    2. 不适用于 null, undefined, Number 类型。
            let a = '  abc  ';
            let a1 = a.trim();
            console.log(`|${a}| |${a1}|`); //|  abc  | |abc|
    
            let b = '  abc  ';
            let b1 = b.trimStart();
            console.log(`|${b}| |${b1}|`); //|  abc  | |abc  |
            
            let c = '  abc  ';
            let c1 = c.trimEnd();
            console.log(`|${c}| |${c1}|`); //|  abc  | |  abc|
    

    string.at() : 方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置)。

    1. 参数位置超出了字符串范围,at()返回undefined。
            let str = 'hello';
            console.log(str.at(1)); // "e"
            console.log(str.at(-1)); // "o"
            console.log(str.at(10)); // undefined
            console.log(str.at(-10)); // undefined
    
  • 相关阅读:
    344. 反转字符串
    942. 增减字符串匹配
    CGO内部机制
    CGO函数调用
    CGO类型转换
    CGO基础
    Go net/http代理
    GO-中间件(Middleware )
    Go如何巧妙使用runtime.SetFinalizer
    ARM基础
  • 原文地址:https://www.cnblogs.com/jiaoshou/p/15742605.html
Copyright © 2011-2022 走看看