JavaScript 字符串方法

  • JavaScript字符串方法

    字符串方法可以帮助您使用字符串。比如说截取字符串,获取字符串长度,大小写转换,获取字符串中字符的位置等。
    原始值,如“John Doe”,不能具有属性或方法(因为它们不是对象)。但是使用JavaScript,方法和属性也可用于原始值,因为JavaScript在执行方法和属性时将原始值视为对象。
  • 获取字符串长度

    使用内置length属性获得字符串的长度:
    var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var sln = txt.length;
    尝试一下
  • 在字符串中查找字符串的位置

    indexOf()方法返回字符串中指定文本第一次出现的索引(位置):
    var str = "Please locate where 'locate' occurs!";
    var pos = str.indexOf("locate");
    尝试一下
    JavaScript从0开始计算索引。0是字符串中的第一个位置,1是第二个,2是第三个......
    lastIndexOf()方法返回字符串中最后一次出现的指定文本的索引:
    var str = "Please locate where 'locate' occurs!";
    var pos = str.lastIndexOf("locate");
    尝试一下
    indexOf()lastIndexOf()两者都是如果找不到文本则返回-1。
    var str = "Please locate where 'locate' occurs!";
    var pos = str.lastIndexOf("John");
    尝试一下
    两种方法都接受第二个参数作为搜索的起始位置:
    var str = "Please locate where 'locate' occurs!";
    var pos = str.indexOf("locate",15);
    尝试一下
  • 在字符串中搜索字符串

    search()方法在字符串中搜索指定的值并返回匹配的位置:
    var str = "Please locate where 'locate' occurs!";
    var pos = str.search("locate");
    尝试一下
    你注意到了吗?indexOf()search(),功能是一样的吗?它们接受相同的参数,并返回相同的值?其实这两种方法并不相同。有这些是差异:
    • search()方法不能采用第二个起始位置参数。
    • indexOf()方法无法获取强大的搜索功能(正则表达式参数)。
    您将在后面的章节中了解有关正则表达式的更多信息。
  • 提取字符串部分

    提取字符串的一部分有3种方法:
    • slice(start, end)
    • substring(start, end)
    • substr(start, length)
    slice()方法提取字符串的一部分并将提取的部分返回到新字符串中。该方法需要2个参数:起始位置和结束位置(获取的字符串不包括结束位置的字符)。此示例将字符串的一部分从位置7切割到位置12(13-1):
    var str = "Apple, Banana, Kiwi";
    var res = str.slice(7, 13);
    尝试一下
    请记住:JavaScript从零开始计算索引。第一个位置是0。
    如果参数为负,则从字符串的末尾开始计算位置。此示例将字符串的一部分从位置-12切换到位置-6:
    var str = "Apple, Banana, Kiwi";
    var res = str.slice(-12, -6);
    尝试一下
    如果省略第二个参数,该方法将切出字符串的其余部分:
    var res = str.slice(7);
    尝试一下
    或者,从最后算起:
    var res = str.slice(-12);
    尝试一下
    数负位置在Internet Explorer 8及更早版本中不起作用。
    substring()类似于slice()。不同的是,substring()不能接受负数参数。
    var str = "Apple, Banana, Kiwi";
    var res = str.substring(7, 13);
    尝试一下
    substr()类似于slice()。不同之处在于第二个参数指定了提取部分的长度。
    var str = "Apple, Banana, Kiwi";
    var res = str.substr(7, 6);
    尝试一下
    如果省略第二个参数,substr()将切掉字符串的其余部分。
    var str = "Apple, Banana, Kiwi";
    var res = str.substr(7);
    尝试一下
    如果第一个参数是负数,则位置从字符串的末尾开始计数。
    var str = "Apple, Banana, Kiwi";
    var res = str.substr(-4);
    尝试一下
  • 替换字符串内容

    replace()方法用指定的值替换字符串中的部分:
    str = "Please visit Microsoft!";
    var n = str.replace("Microsoft", "CAINIAOYA");
    
    尝试一下
    replace()方法不会更改调用它的字符串。它返回一个新字符串。
    默认情况下,replace()函数仅替换第一个匹配:
    str = "Please visit Microsoft and Microsoft!";
    var n = str.replace("Microsoft", "CAINIAOYA");
    
    尝试一下
    默认情况下,该replace()功能区分大小写。编写MICROSOFT(带大写)不起作用:
    str = "Please visit Microsoft!";
    var n = str.replace("MICROSOFT", "CAINIAOYA");
    尝试一下
    要替换不区分大小写,请使用带有/i标志的正则表达式忽略大小写:
    str = "Please visit Microsoft!";
    var n = str.replace(/MICROSOFT/i, "CAINIAOYA");
    尝试一下
    请注意,正则表达式没有引号。
    要替换所有匹配项,请使用带有/g标志的正则表达式(全局匹配):
    str = "Please visit Microsoft and Microsoft!";
    var n = str.replace(/Microsoft/g, "CAINIAOYA");
    尝试一下
    您将在后面章节中学到更多关于正则表达式的知识。
  • 转换为大写和小写

    toUpperCase()方法将字符串转换为大写:
    var text1 = "Hello World!";       // String
    var text2 = text1.toUpperCase();  // text2 是 text1 的大写
    尝试一下
    toLowerCase()方法将字符串转换为小写:
    var text1 = "Hello World!";       // String
    var text2 = text1.toLowerCase();  // text2是text1小写
    尝试一下
  • 拼接字符串

    concat()连接两个或多个字符串:
    var text1 = "Hello";
    var text2 = "World";
    var text3 = text1.concat(" ", text2);
    尝试一下
    concat()方法可以使用加号运算符代替。这两行也是一样的:
    var text = "Hello" + " " + "World!";
    var text = "Hello".concat(" ", "World!");
  • 删除字符串两旁空格

    trim()方法从字符串的两边删除空格:
    var str = "       Hello World!        ";
    alert(str.trim());
    尝试一下
    Internet Explorer 8或更低版本不支持trim()方法。
    如果您需要支持IE 8,则可以使用replace()正则表达式:
    var str = "       Hello World!        ";
    alert(str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''));
    尝试一下
    您还可以使用上面的替换解决方案向JavaScript添加trim函数String.prototype:
    if (!String.prototype.trim) {
     String.prototype.trim = function () {
       return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
    };
    var str = "       Hello World!        ";
    alert(str.trim());
    尝试一下
  • 提取字符串字符

    提取字符串字符有3种方法:
    • charAt(position)
    • charCodeAt(position)
    • 属性访问[]
    charAt()方法返回字符串中指定索引(位置)的字符:
    var str = "HELLO WORLD";
    str.charAt(0);            // 返回 H
    尝试一下
    charCodeAt()方法返回字符串中指定索引处的字符的unicode:方法返回UTF-16代码(0到65535之间的整数)。
    var str = "HELLO WORLD";
    
    str.charCodeAt(0);         // 返回  72
    尝试一下
    ECMAScript 5(2009)允许对字符串进行属性访问[]
    var str = "HELLO WORLD";
    str[0];                   // 返回 H
    尝试一下
    属性访问可能有点不可预测:
    • 它在Internet Explorer 7或更早版本中不起作用
    • 它使字符串看起来像数组(但它们不是)
    • 如果未找到任何字符,则[]返回undefined,而charAt()返回空字符串。
    • 它是只读的。str[0]=“A”没有错误(但不起作用!)
    var str = "HELLO WORLD";
    str[0] = "A";             // 没有错误,但不起作用
    str[0];                   // 返回 H
    尝试一下
    如果要将字符串作为数组使用,可以将其转换为数组。
    可以使用split()方法将字符串转换为数组:
    var txt = "a,b,c,d,e";   // String
    txt.split(",");          // 用逗号分隔
    txt.split(" ");          // 用空格分隔
    txt.split("|");          // 用竖线分隔
    尝试一下
    如果省略分隔符,则返回的数组将包含index[0]中的整个字符串。如果分隔符是“”,则返回的数组将是单个字符的数组:
    var txt = "Hello";       // String
    txt.split("");           // 用空字符串分隔
    尝试一下
    有关完整字符串参考,请转到我们的完整JavaScript字符串参考。该参考包含所有字符串属性和方法的描述和示例。