(1)charAt(idnex)
读取字符串中索引为index
的字符。若是索引大于字符串长度,或者小于0会返回空字符串。javascript
"hello world".charAt(1) //"e"
'abc'.charAt(-1) // ""
'abc'.charAt(3) // ""
var s = new String("hello world"); // 转成字符串对象
复制代码
"hello world"[1]; // "e"
复制代码
fromCharCode默认支持2个字节,超过0xFFFF的部分会自动忽略,因此超过2个字节(汉字4个字节)须要转成2个字节的表示。java
String.fromCharCode(104, 101, 108, 108, 111)
//"hello"
String.fromCharCode(0xD842, 0xDFB7)
// "𠮷"
复制代码
"hello".length; // 5
复制代码
charCodeAt
获取指定位置的字符的Unicode
码.若是参数为负数,或大于等于字符串的长度,charCodeAt
返回NaN
。正则表达式
"hello".charCodeAt(0) // 104
'abc'.charCodeAt(-1) // NaN
'abc'.charCodeAt(4) // NaN
复制代码
concat
方法用于链接两个字符串,返回一个新字符串,不改变原字符串。数组
var s1 = 'abc';
var s2 = 'def';
s1.concat(s2) // "abcdef"
s1 // "abc" 不发生改变
复制代码
slice
方法用于从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)。函数
'JavaScript'.slice(0, 4) // "Java" 左闭右开
'JavaScript'.slice(2); // "vaScript" 只有一个数字的时候会从这个索引开始取到最后
//若是参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度。
'JavaScript'.slice(-6) // "Script"
'JavaScript'.slice(0, -6) // "Java"
'JavaScript'.slice(-2, -1) // "p"
'JavaScript'.slice(2, 1) // "" 若是第一个参数大于第二个参数,slice方法返回一个空字符串。
复制代码
substring
方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice
方法很相像。以两个参数中较小的为起点较大的为终点。ui
'JavaScript'.substring(0, 4) // "Java"
'JavaScript'.substring(4) // "Script"
'JavaScript'.substring(10, 4) // "Script"
// 等同于 会本身交换两个数字,让大的那个数字做为终点
'JavaScript'.substring(4, 10) // "Script"
// 若是参数是负数会自动转为0
'Javascript'.substring(-3) // "JavaScript"
'JavaScript'.substring(4, -3) // "Java" 转为0以后就是 (4,0)会自动转为(0,4)
复制代码
substr
方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice
和substring
方法的做用相同。substr
方法的第一个参数是子字符串的开始位置(从0开始计算),第二个参数是子字符串的长度。spa
'JavaScript'.substr(4, 6) // "Script"
'JavaScript'.substr(4) // "Script" 省略第二个参数会 一直取到最后
// 若是第一个参数是负数,表示倒数计算的字符位置。
'JavaScript'.substr(-6) // "Script"
// 若是第二个参数是负数,将被自动转为0,所以会返回空字符串。
'JavaScript'.substr(4, -1) // ""
复制代码
indexOf方法用于肯定一个字符串在另外一个字符串中第一次出现的位置,第一个参数是须要匹配的字符串,第二个参数是开始查找的索引,顺着这个索引日后prototype
lastIndexOf
用法和indexOf相似,可是从末尾开始匹配,第一个参数是须要匹配的字符串,第二个参数是开始查找的索引,顺着这个索引往前3d
'hello world'.indexOf('o', 6) // 7
'hello world'.lastIndexOf('o', 6) // 4
复制代码
trim
方法用于去除字符串两端的空白符,包括空格,制表符(\t
、\v
)、换行符(\n
)和回车符(\r
)。不改变原字符串code
'\r\nabc \t'.trim() // 'abc'
复制代码
'Hello World'.toLowerCase(); // 转成小写
// "hello world"
'Hello World'.toUpperCase(); // 转成大写
// "HELLO WORLD"
复制代码
split
方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。第一个参数是分隔符,split
方法还能够接受第二个参数,限定返回数组的最大成员数。
'a|b|c'.split('|') // ["a", "b", "c"] 默认数组成员个数是所有
'a|b|c'.split('|', 2) // ["a", "b"] 数组最大个数是2个
复制代码
(1)直接用 > < =
直接用运算符比较是按照字典序Unicode码的顺序比较
'B'>'a' // false
复制代码
(2)localeComparelocaleCompare
方法用于比较两个字符串。它返回一个整数,若是小于0,表示第一个字符串小于第二个字符串;若是等于0,表示二者相等;若是大于0,表示第一个字符串大于第二个字符串。会按照天然语言的顺序判断
'B'.localeCompare('a') // 1 天然语言序是 B > a
复制代码
(1)一种是使用字面量,以斜杠表示开始和结束。第二个斜杠后面是修饰符
var reg = /abc/g
复制代码
(2)使用RegExp
构造函数,第一个参数是正则表达式。第二个参数是修饰符
var reg = new RegExp('abc',g);
复制代码
第一种方法在引擎编译代码时,就会新建正则表达式,第二种方法在运行时新建正则表达式,因此前者的效率较高。并且,前者比较便利和直观,因此实际应用中,基本上都采用字面量定义正则表达式
- i 默认状况下,正则对象区分字母的大小写,加上
i
修饰符之后表示忽略大小写(ignorecase)。
- g 默认状况下,第一次匹配成功后,正则对象就中止向下匹配了。
g
修饰符表示全局匹配(global),加上它之后,正则对象将匹配所有符合条件的结果,主要用于搜索和替换。
- m
m
修饰符表示多行模式(multiline),会修改^
和$
的行为。默认状况下(即不加m
修饰符时),^
和$
匹配字符串的开始处和结尾处,加上m
修饰符之后,^
和$
还会匹配行首和行尾,即^
和$
会识别换行符(\n
)。
RegExp.prototype.ignoreCase
:返回一个布尔值,表示是否设置了i
修饰符。
RegExp.prototype.global
:返回一个布尔值,表示是否设置了g
修饰符。
RegExp.prototype.multiline
:返回一个布尔值,表示是否设置了m
修饰符。
RegExp.prototype.lastIndex:返回一个整数,表示下一次开始搜索的位置。该属性可读写,可是只在进行连续搜索时有意义。
RegExp.prototype.source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读
var r = /abc/igm;
r.ignoreCase // true
r.global // true
r.multiline // true
r.lastIndex // 0
r.source // "abc"
复制代码
正则实例对象的test
方法返回一个布尔值,表示当前模式是否能匹配参数字符串
/abc/.test("abcdef"); // true
复制代码
若是正则表达式带有g
修饰符,则每一次test
方法都从上一次结束的位置开始向后匹配。
var r = /x/g;
var s = '_x_x';
r.lastIndex // 0
r.test(s) // true
r.lastIndex // 2
r.test(s) // true
r.lastIndex // 4
r.test(s) // false
复制代码
带有g
修饰符时,能够经过正则对象的lastIndex
属性指定开始搜索的位置。
var r = /x/g;
var s = '_x_x';
r.lastIndex = 4;
r.test(s) // false
r.lastIndex // 0
r.test(s)
复制代码
注意,带有g
修饰符时,正则表达式内部会记住上一次的lastIndex
属性,这时不该该更换所要匹配的字符串,不然会有一些难以察觉的错误。
var r = /bb/g;
r.test('bb') // true
r.test('-bb-') // false
复制代码
正则实例对象的exec
方法,用来返回匹配结果。若是发现匹配,就返回一个数组,成员是匹配成功的子字符串,不然返回null
。
var s = '_x_x';
var r1 = /x/;
var r2 = /y/;
r1.exec(s) // ["x"]
r2.exec(s) // null
复制代码
exec
方法的返回数组还包含如下两个属性:
input
:整个原字符串。
index
:整个模式匹配成功的开始位置(从0开始计数)。
var reg = /a/g;
var str = 'abc_abc_abc'
var r1 = reg.exec(str);
r1 // ["a"]
r1.index // 0
reg.lastIndex // 1
var r2 = reg.exec(str);
r2 // ["a"]
r2.index // 4
reg.lastIndex // 5
var r3 = reg.exec(str);
r3 // ["a"]
r3.index // 8
reg.lastIndex // 9
var r4 = reg.exec(str);
r4 // null
reg.lastIndex // 0
复制代码
String.prototype.match()
:返回一个数组,成员是全部匹配的子字符串。
String.prototype.search()
:按照给定的正则表达式进行搜索,返回一个整数,表示匹配开始的位置。
String.prototype.replace()
:按照给定的正则表达式进行替换,返回替换后的字符串。
String.prototype.split()
:按照给定规则进行字符串分割,返回一个数组,包含分割后的各个成员。
字符串实例对象的match
方法对字符串进行正则匹配,返回匹配结果。
var s = '_x_x';
var r1 = /x/;
var r2 = /y/;
s.match(r1) // ["x"] 没有设置g返回匹配的第一个
s.match(r2) // null 没有匹配
var s = 'abba';
var r = /a/g;
s.match(r) // ["a", "a"] 使用g以后返回所有匹配的子串
复制代码
字符串对象的search
方法,返回第一个知足条件的匹配结果在整个字符串中的位置。若是没有任何匹配,则返回-1
。
'_x_x'.search(/x/)
// 1
复制代码
字符串对象的replace
方法能够替换匹配的值。它接受两个参数,第一个是正则表达式,表示搜索模式,第二个是替换的内容。
'aaa'.replace('a', 'b') // "baa" 默认替换第一个
'aaa'.replace(/a/, 'b') // "baa"
'aaa'.replace(/a/g, 'b') // "bbb" g修饰符替换所有
复制代码
replace
方法的第二个参数可使用美圆符号$
,用来指代所替换的内容。
$&
:匹配的子字符串。
`$``:匹配结果前面的文本。
$'
:匹配结果后面的文本。
$n
:匹配成功的第n
组内容,n
是从1开始的天然数。
$$
:指代美圆符号$
。
'hello world'.replace(/(\w+)\s(\w+)/, '$2 $1')
// "world hello"
'abc'.replace('b', '[$`-$&-$\']')
// "a[a-b-c]c"
复制代码
匹配b
因此$&
是b
,b
前面是a
因此$``是
a,
b后面是是
c因此
$'是
c<br />
replace`方法的第二个参数还能够是一个函数,将每个匹配内容替换为函数返回值。
'3 and 5'.replace(/[0-9]+/g, function (match) {
return 2 * match;
})
// "6 and 10"
复制代码
做为replace
方法第二个参数的替换函数,能够接受多个参数。其中,第一个参数是捕捉到的内容,第二个参数是捕捉到的组匹配(有多少个组匹配,就有多少个对应的参数)。此外,最后还能够添加两个参数,倒数第二个参数是捕捉到的内容在整个字符串中的位置(好比从第五个位置开始),最后一个参数是原字符串。下面是一个网页模板替换的例子。
var prices = {
'p1': '$1.99',
'p2': '$9.99',
'p3': '$5.00'
};
var template = '<span id="p1"></span>'
+ '<span id="p2"></span>'
+ '<span id="p3"></span>';
template.replace(
/(<span id=")(.*?)(">)(<\/span>)/g,
function(match, $1, $2, $3, $4){
return $1 + $2 + $3 + prices[$2] + $4;
}
);
// "<span id="p1">$1.99</span><span id="p2">$9.99</span><span id="p3">$5.00</span>"
复制代码
字符串对象的split
方法按照正则规则分割字符串,返回一个由分割后的各个部分组成的数组。
该方法接受两个参数,第一个参数是正则表达式,表示分隔规则,第二个参数是返回数组的最大成员数。
// 非正则分隔
'a, b,c, d'.split(',')
// [ 'a', ' b', 'c', ' d' ]
// 正则分隔,去除多余的空格
'a, b,c, d'.split(/, */)
// [ 'a', 'b', 'c', 'd' ]
// 指定返回数组的最大成员
'a, b,c, d'.split(/, */, 2)
[ 'a', 'b' ]
复制代码