字符串在JS中是一种基础类型,也是很长用的一种类型,但是他有很多自己的方法可以使用,下面进行一下总结。
-
length: 获取字符串的长度
'hello world'.length // 11
-
charAt(): 返回在指定位置的字符
'hello world'.charAt(4) // o
-
charCodeAt(): 返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
'hello world'.charCodeAt(4) // 111
4.concat():连接两个或多个字符串
'hello world'.concat('123', '456') // hello world123456
一般使用
+
进行字符串的拼接,在ES6中可以使用``
模版处理字符串拼接问题,更高效,方便。
-
fromCharCode(): 可接受一个指定的 Unicode 值,然后返回一个字符串,是charCodeAt的逆过程。
String.fromCharCode(72,69,76,76,79) // 'HELLO'
-
indexOf(): 可返回某个指定的字符串值在字符串中首次出现的位置
'hello world'.indexOf('l', 1) // 2
-
toLowerCase(): 把字符串转换为小写
'HELLO WORLD'.toLowerCase() // hello world
-
toUpperCase() : 把字符串转换为大写。
'hello world'.toUpperCase() // HELLO WORLD
以上方法比较使用起来比较容易,下面介绍的方法使用起来稍微复杂,replace
, 但是也更长用到:
-
split(): 把一个字符串分割成字符串数组
用法:stringObject.split(separator,howmany)
separator
必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。
howmany
可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。'hello world'.split(' ') // ['hello', 'world'] 'hello world'.split(/\s/) // ['hello', 'world'] 'hello world'.split(' ' , 1) // ['hello']
String.split() 执行的操作与Array.join 执行的操作是相反的
-
seach(): 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串
'hello world'.search('l') // 2 'hello world'.search(/\s/) // 5
search()
方法不执行全局匹配,它将忽略标志g
。它同时忽略regexp
的lastIndex
属性,并且总是从字符串的开始进行检索,这意味着它总是返回stringObject
的第一个匹配的位置。
- substring(),slice()和substr()
这两个方法很相似,在这里对比说明一下。
substring(start, stop)
: 提取字符串中两个指定的索引号之间的字符,不接受负参数
substr(start, length)
: 从起始索引号提取字符串中指定数目的字符
slice(start,end)
: 可提取字符串的某个部分,并以新的字符串返回被提取的部分
start
:要抽取的片断的起始下标。如果是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推
end
: 紧接着要抽取的片段的结尾的下标。若未指定此参数,则要提取的子串包括 start 到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置。
'01234567'.slice(1, 4) // 123
'01234567'.slice(-4) // 4567
其他情况请自己尝试,大同小异。
String 对象的方法 slice()、substring() 和 substr() (不建议使用)都可返回字符串的指定部分。slice() 比 substring() 要灵活一些,因为它允许使用负数作为参数。slice() 与 substr() 有所不同,因为它用两个字符的位置来指定子串,而 substr() 则用字符位置和长度来指定子串。
-
match(): 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配
// 正则带g var url = 'http://www.baidu.com?a=1&b=2&c=3'; var reg = /([^?&=]+)=([^?&=])*/g; var result = url.match(reg); console.log(result); //["a=1", "b=2", "c=3"] // 正则不带g var url = 'http://www.baidu.com?a=1&b=2&c=3'; var reg = /([^?&=]+)=([^?&=])*/; var result = url.match(reg); console.log(result); //["a=1", "a", "1", index: 21, input: "http://www.baidu.com?a=1&b=2&c=3"
13.replace(): 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
用法: stringObject.replace(regexp/substr,replacement)
regexp/substr
必需。规定子字符串或要替换的模式的 RegExp 对象。
请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。
replacement
必需。一个字符串值。规定了替换文本或生成替换文本的函数。
如果
regexp
具有全局标志g
,那么replace()
方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
字符替换文本
$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$' 位于匹配子串右侧的文本。
$$ 直接量符号。
'hello world'.replace(/(w)orld/, '$1!') // hello w!
'hello world'.replace(/(w)orld$/, '$&!') // hello world!
'hello world'.replace(/(w)orld$/, '$`!') // hello hello !
'hello world'.replace(/(w)orld/, "$'!") // hello !
'hello world'.replace(/(w)orld/, "$$!") //hello $!
如果第二个参数传入了一个函数,在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。
function replacer(match, p1, p2, p3, offset, string) {
// p1 is nondigits, p2 digits, and p3 non-alphanumerics
return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString); // abc - 12345 - #$*%`