一、概述
字符串在JavaScript中几乎无处不在,在你处理用户的输入数据的时候,在读取或设置DOM对象的属性时,在操作cookie时,当然还有更 多…。JavaScript的核心部分提供了一组属性和方法用于通用的字符串操作,如分割字符串,改变字符串的大小写,操作子字符串等。
当前的大部分浏览器也能从强大的正则表达式获益,因为它极大地简化了大量的字符串操作任务,不过它也需要你克服一条有些陡峭的学习曲线。在这里,主要是介绍字符串本身的一些操作,正则表达式会在以后的随笔中涉及。
二、字符串的创建
创建一个字符串有几种方法。最简单的是用引号将一组字符包起来,可以将其赋值给一个变量。
|
|
可以用双引号或者单引号将字符串包含,但要注意的是,作为定界字符串的一对引号必须是相同的,不能混用。
像var str = "Fluffy is a pretty cat.';
这样的声明是非法的。
允许使用两种引号,使得某些操作变得简单,比如将一种嵌入另外一种:
document.write("<img src='imh/logo.jpg' height='30' width='100' alt='logo'>");
我们在上面脚本创建的几个字符串,但本质上,它们并不是真正的字符串对象,准确的说,他们是字符串类型的值。要创建一个字符串对象,可使用如下语句:
var strObj = new String("Hello,String!");
使用typeof
运算符查看会发现,上面的str类型是String,而strObj类型为object。如果想知道字符串的长度,使用其length属性:str.length。
三、字符串方法
1、查找方法
查找字符
charAt()
- 功能:
返回字符串中的第n个字符 - 返回值:
字符串中的第n个字符的实际值 - 参数:
数字类型,超出范围会返回空字符串。
|
|
charCodeAt()
- 功能:
返回字符串中的第n个字符的代码 - 返回值:
· 内容:
字符串中的第n个字符的Unicode编码。
· 范围:
0~65535之间的16为整数。 - 参数:
数字类型,超出范围会返回空字符串。
|
|
formCharCode()
- 功能:
根据字符编码创建字符串 - 返回值:
有指定编码字符组成的新字符串 - 参数:
0个或多个整数,代表字符的Unicode编码 - 特性:
静态方法,实为构造函数String()的属性
|
|
charAt与charCodeAt比较:
- 共性:
· 功能:根据下标查找指定字符
· 参数:1.n,要查询的字符下标;2.有效范围:0~length-1之间。 - charAt与charCodeAt互为反操作
查找位置
indexOf()
从前向后检索字符串,看其是否含有指定子串。
lastIndexOf()
从后向前检索字符串,看其是否含有指定子串。
二者的共性
功能:
都是根据制定字符串查找下标位置
参数:
· 必选:将要查询的子字符串;
· 可选:开始查找的位置下标;
a.值为负数时,视作0;
b.默认从起始位置开始查找;
c.超出0~length-1时候,返回-1;- 返回值:
· 找到指定子串,返回子串首次出现的下标;
· 未找到指定子串,返回-1;
匹配查找
match()
功能:找到一个或多个正则表达式的匹配
正则表达式会在以后的随笔中涉及
参数:
- 要进行模式匹配的正则表达式
- 当为非正则表达式时将其传递给RegExp()构造函数,并转换为正则表达式对象。
返回值:
返回一个数组,数组存放匹配的结果
- 有全局标记g:执行全局检索。
· 找到后返回数组
a. 内容:所有匹配的子串;
b. 缺陷:没有派生属性;不提供与字表达式匹配的文本信息;不声明每个字符串的位置。
c. 弥补:使用RegExp.exec()方法。
· 没有找到:返回Null。 - 无全局标记g:执行一次匹配。
· 找到后返回数组
a. 内容:第0个元素,匹配文本;其他元素:与正则子表达式匹配的文本。
b. 属性:input:使用该方法的字符串对象;index:匹配文本的起始字符在字符串中的位置;lastIndex:匹配文本的末尾字符在字符串中的位置。
· 没有找到:返回Null。
search()
- 功能:检索字符串中与正则表达式匹配的子串;
- 参数:与match()相同;
- 返回值:
· 找到:字符串中的第一个与正则表达式相匹配的子串的起始位置; - 特性:忽略全局标记g和lastIndex()属性;
replace()
- 功能:替换一个与正则表达式匹配的子串;
- 参数:参数1,需要进行替换的正则表达式对象或者字符串;参数2,替换文本或替换函数。
- 特性:
· 如果参数1仅为字符串则只进行一次匹配替换,若替代所有的子串则必须制定全局标记g;
· 如果参数2仅为字符串则可以使用特殊字符序列:
$$,$;
$&,匹配整个模式的子字符串;
$’,匹配的子字符串之前的子字符串;
$`,匹配的子字符串之后的子字符串;
$n,匹配第n个捕获组的子字符串(n=0~9);
$nn,匹配第nn个捕获组的子字符串(nn=01~99);
split()
- 功能:根据制定分隔符将字符串分割成多个字串,并返回成数组;
- 参数:
· 必须:指定的分隔符;
· 可选:指定数组的长度。
2.操作方法
拼接操作concat()
- 语法:
string.concat(value);
- 功能:连接字符串;
- 参数:要连接到string上的一个或多个值;
- 返回值:把所有参数都连接到字符串string上得到的新字符串;
- 特性:功能与”+”相同,原始字符串的实际值并未被正真修改。
截取方法:
根据下标截取字符串
- slice(),当参数为负值时,与字符串长度相加;
- substring(),当参数为负值时,转换成0.
二者的共性:参数二是截取的子字符串的最后一个字符后面的下标
根据长度截取子串
substr()
:
- 参数二:返回的字符个数
- 负值参数:
· 参数1:与字符串长度相加;
· 参数2:转换成0.
slice(),substring()以及substr()三者的共性:
(1) 功能:截取被操作字符串中的子串;
(2) 参数1:指定子串的开始位置;
(3) 省略参数2:以字符串长度为结束位置。
空格处理
- trim ,清除前置及后缀空格(只能清除两边的空格!)
- trimLeft,清除前置空格;
- trimRight,清除后缀空格。
比较方法
localCompare()
:
- 功能:用本地特定顺序比较两个字符串;
- 参数:与原字符串进行比较的字符串;
- 返回值,(说明比较结果的数字):
· 负数:原字符串<参数字符串;
· 0:原字符串=参数字符串;
· 正数:原字符串>参数字符串。
3.编码方法
- 字符串常规编码与解码:
· escape();
· unescape(); - URI字符串编码与解码:
· eccodeURI();
· decodeURI(); - URI组件编码与解码:
· eccodeURIComponent();
· decodeURIComponent();
4.转换方法
大小写转换:
- 转为大写:
· toUpperCase();
· toLocalUpperCase(); 本地 - 转为小写:
· toLowerCase();
· toLocalLowerCase(); 本地 - 代码转换:用JS动态格式化html,不具语义性,舍弃。