JS的字符

简介

String 类型是字符串的对象包装类型,可以用 String 构造函数的方法来创建。

1
var str = new String('hello world');

该对象的方法也可以在所有基本的字符串值中访问到,其中继承的 valueOf()toLocaleString()toString() 方法都返回对象所表示的基本字符串值。

String 类型的每个实例都有一个 length 属性,表示字符串中有多少个字符。

1
2
var str = 'hello world';
str.length; // length 的属性值为 11,因为空格也算一个字符

字符方法

查询

charAt()charCodeAt(),这两个方法都接受一个参数,即基于 0 的字符位置。其中 charAt() 方法以单字符串的形式返回给定位置的那个字符。

1
2
var str = 'hello world';
str.charAt(1); // 输出字符 'e'

charCodeAt() 则是返回的字符编码。

1
2
var str = 'hello world';
str.charCodeAt(1); // 输出字符 'e' 的字符编码 "101"

ECMAScript 5 中还可以用类似于数组的形式访问字符串中指定的字符。

1
2
var str = 'hello world';
str[1]; // 方括号加索引值,输出字符 'e'

但是会有一定的兼容问题,在 IE7 及以下的浏览器中会返回 undefined

indexOf 和 lastIndexOf

有两个可以从字符串中查找子字符串的方法:indexOf()lastIndexOf()。这两个方法都是从一个字符串中搜寻给定的子字符串,然后返回子字符串的位置。如果没有找到该字符串,则会返回 -1。两者的区别在于,前者从字符串的开头向尾部搜索,后者从字符串的尾部向首部搜索。

1
2
3
var str = "hello world";
str.indexOf("o"); // 4
str.lastIndexOf("o"); // 7

如果指定的字符值只出现了一次,那么 indexOf()lastIndexOf() 会返回相同的位置值。这两个方法都可以接受可选的第二个参数,用来表示从字符串中的哪个位置开始搜索,并会忽略该位置之前的所有字符。

1
2
3
var str = "hello world";
str.indexOf("o", 6); // 7
str.lastIndexOf("o", 6); // 4

利用这两种方法的特性,我们可以通过循环调用它们来查找所有匹配的子字符串:

1
2
3
4
5
6
7
8
var str = 'everything be okay';
var array = [];
var strIndex = str.indexOf('e');
while (strIndex > -1) {
array.push(strIndex);
strIndex = str.indexOf('e', strIndex++);
}
alert(array); // 输出 str 里面的所有的 'e' 的位置

连接字符串

concat() 用于将一个或多个字符串拼接起来,返回拼接得到的新字符串。

1
2
var str = 'hello';
var result = str.concat(' world', '!');

用加号 + 也能进行字符串之间的拼接:

1
2
var str = 'hello';
var result = str + ' world' + '!';

剪裁

slice()substr()substring() 这三个方法都会返回被操作字符串的一个子字符串,而且也都接受一个或者两个参数。第一个参数指定子字符串的开始位置,第二个参数(在指定情况下)表示子字符串到哪里结束。具体来说,slice()substring() 的第二个参数指定的是最后一个子字符串的位置,而 substr() 的第二个参数指定的则是返回的字符个数。如果没有给这些方法传递第二个参数,则将字符串的长度作为结束位置。与 concat() 方法一样,slice()substr()substring() 也不会修改字符串本身的值,它们只是返回一个基本类型的字符串值,对原始字符串没有任何影响。

slice():

slice() 方法用于截取字符串的一部分。第一个参数代表开始位置,第二个参数代表结束位置的下一个位置。截取出来的字符串的长度为第二个参数与第一个参数之间的差。如果第二个参数值为负数,则将该值加上字符串长度后转为正值。如果第一个参数大于等于第二个参数,则返回空字符串。

示例:

1
2
3
4
var str = "hello world";
str.slice(3); // 返回从第三个字符包括后面的所有字符: "lo world"
str.slice(3, 6); // 返回 "lo "
str.slice(-3, -1); // 结果是总字符串的长度加上 -3 = 8,然后再加 -1,结果是 10。等同于 str.slice(8, 10)

substring():

substring() 方法用于截取字符串的一部分。第一个参数代表开始位置,第二个参数代表结束位置的下一个位置。与 slice() 方法表现相同。不同之处在于,当参数为负数时,substring() 方法会将所有的负值参数都转换为 0,并且 substring() 总是将最小的数作为起始位置。

示例:

1
2
3
4
5
var str = "hello world";
str.substring(3); // "lo world"
str.substring(3, 6); // 返回 "lo "
str.substring(2, -3); // 等同于 str.substring(0, 2)
str.substring(-3); // 结果与 str.substring(0) 相同,结果是 "hello world"

substr():

substr() 方法用于截取字符串的一部分。与前面两个方法的不同之处在于,substr() 方法的第二个参数指定的是要返回的字符个数,而不是要返回的位置。

示例:

1
2
var str = 'hello world';
str.substr(1, 6); // 返回 "ello w"

split():

split() 方法可以基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中。分隔符可以是字符串,也可以是一个正则表达式对象。split() 方法还可以接受可选的第二个参数,用于指定数组的大小,以便确保返回的数组不会超过指定的大小。

示例:

1
2
3
var colorText = 'red, blue, green, yellow';
var color1 = colorText.split(','); // ['red', 'blue', 'green', 'yellow']
var color2 = colorText.split(',', 2); // ['red', 'blue']

trim():

trim() 方法会创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果。trim() 返回的是字符串的副本,不会改变原始值。此外,还有指定具体方向的方法 trimLeft()trimRight(),用于删除字符串开头和末尾的空格。

示例:

1
2
var str = " hello world ";
var trimStr = str.trim(); // 结果是 "hello world"

大小写转换:

ECMAScript 中涉及字符串大小写转换的方法有4个:

  • toLowerCase(): 将字符串转换为小写字母形式。
  • toLocaleLowerCase(): 针对特定地区实现正确转换的方法。
  • toUpperCase(): 将字符串转换为大写字母形式。
  • toLocaleUpperCase(): 针对特定地区实现正确转换的方法。

示例:

1
2
3
var str = "Hello World";
str.toLowerCase(); // "hello world"
str.toUpperCase(); // "HELLO WORLD"

匹配:

String 类型定义了几个用于在字符串中匹配模式的方法,其中一个是 match() 方法。该方法接受一个参数,可以是一个正则表达式或一个 RegExp 对象。

示例:

1
2
3
4
var text = "cat, bat, sat, fat";
var pattern = /.at/;
var matches = text.match(pattern); // 与 pattern.exec(text) 相同
matches[0]; // "cat"

另一个方法是 search(),它接受一个由字符串slice(), substring(), substr(), split(), trim(), toLowerCase(), toLocaleLowerCase(), toUpperCase(), toLocaleUpperCase(), match(), search() 等是 JavaScript 中用于操作字符串的方法。

  • slice(start, end): 返回从索引 start 到索引 end(不包含 end)之间的子字符串。如果省略 end,则截取到字符串末尾。可以使用负数来表示从字符串末尾开始计数。
  • substring(start, end): 返回从索引 start 到索引 end(不包含 end)之间的子字符串。如果省略 end,则截取到字符串末尾。如果 start 大于 end,则交换两个参数的位置。不接受负数索引。
  • substr(start, length): 返回从索引 start 开始的指定长度的子字符串。
  • split(separator, limit): 将字符串分割成子字符串数组,使用指定的分隔符进行分割。可选的 limit 参数用于限制返回的数组的长度。
  • trim(): 删除字符串开头和末尾的空格,并返回结果。
  • toLowerCase(): 将字符串转换为小写形式。
  • toLocaleLowerCase(): 根据主机环境的当前语言环境将字符串转换为小写形式。
  • toUpperCase(): 将字符串转换为大写形式。
  • toLocaleUpperCase(): 根据主机环境的当前语言环境将字符串转换为大写形式。
  • match(pattern): 在字符串中搜索与指定模式匹配的内容,并返回匹配的结果。pattern 可以是一个正则表达式或一个 RegExp 对象。
  • search(pattern): 在字符串中搜索与指定模式匹配的内容,并返回第一个匹配的位置索引。pattern 可以是一个正则表达式或一个 RegExp 对象。

这些方法可以用于对字符串进行截取、分割、大小写转换、匹配等操作,方便处理和操作字符串数据。

Share