js之String字符串操作

47 篇文章 1 订阅

 JavaScript的字符串就是用''或""括起来的字符表示。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识。例如:

'I\'m \"OK\"!';//输出:I'm "OK"!

具体的转义的特殊字符如下图:

    字符串也可以是对象。通常, JavaScript 字符串是原始值,可以使用字符创建:let a = 'jym'。但我们也可以使用 new 关键字将字符串定义为一个对象:let a = new String('jym')

let x = "John";
let y = new String("John");
typeof x // 返回 String
typeof y // 返回 Object


注意:不要创建 String 对象。它会拖慢执行速度,并可能产生其他副作用:

    原始值字符串,如 "John", 没有属性和方法(因为他们不是对象)。原始值可以使用 JavaScript 的属性和方法,因为 JavaScript 在执行方法和属性时会做一个隐式转换,把原始字符串转化成当作包装对象,使用完毕后立即销毁。

(1)字符串属性

let txt = "Hello World!";
console.log(txt.constructor);//function String() { [native code] }
console.log(txt.length)//12
String.prototype.testAdd = function() {console.log('this is test add prototype function!')}
txt.testAdd()//this is test add prototype function!
//此时所有的字符串对象都可以调用这个testAdd()方法。


(2)字符串方法:

//字符串
 {
    const str = "hello"
    const str1 = "hello world"
    const str2 = "string"
    //string.charAt(index):返回指定位置的字符。
    console.log(str.charAt(0))//h
 
    //string.charCodeAt(index):返回指定位置的字符的 Unicode 编码
    console.log(str.charCodeAt(0))//104
 
    //string.concat(string1, string2, ..., stringX):连接两个或多个字符串。该方法没有改变原有字符串,但是会返回连接两个或多个字符串新字符串。
    console.log(str.concat(' ',str2))//hello string
 
    /**
     * String.fromCharCode(n1, n2, ..., nX):可接受一个指定的 Unicode 值,然后返回一个字符串。
     * 该方法是 String 的静态方法,字符串中的每个字符都由单独的 Unicode 数字编码指定。使用语法: String.fromCharCode()。
     */
    console.log(String.fromCharCode(72,69,76,76,79))//HELLO
 
    /**
     * string.replace(searchvalue,newvalue):在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。返回一个修改后的新字符串,原字符串不改变。
     * searchvalue:规定子字符串或要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。
     * 如果为字符串对象,只替换第一次出现的字符串。
     */
    let str4="Mr Blue has a blue house and a blue car";
    console.log(str4.replace('blue','red'))//Mr Blue has a red house and a blue car
    console.log(str4.replace(/blue/gi,'red'))//Mr red has a red house and a red car
    
    /**
     * string.split([separator],[limit]): 方法用于把一个字符串分割成字符串数组。
     * separator:可选。字符串或正则表达式,从该参数指定的地方分割 string Object。
     * limit:可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
     * 注意: 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
     */
    let str5 = "How are you doing today?"
    console.log(str5.split())//["How are you doing today?"]
    console.log(str5.split(''))//["H", "o", "w", " ", "a", "r", "e", " ", …] 长度24
    console.log(str5.split('',5))//["H", "o", "w", " ", "a"]
    console.log(str5.split('o'))//["H", "w are y", "u d", "ing t", "day?"]
 
    /**
     * string.trim():去除字符串两边的空格。
     */
    
    /**
     * string.valueOf():可返回 String 对象的原始值。
     * 注意: valueOf() 方法通常由 JavaScript 在后台自动进行调用,而不是显式地处于代码中。
     */
    console.log(str1)//hello world
    console.log(str1.valueOf())//hello world
 
    
    /**
     * string.toLowerCase():用于把字符串转换为小写。
     * string.toUpperCase():用于把字符串转换为大写。
     */
    console.log(str1.toLocaleLowerCase())//hello world
    console.log(str1.toLocaleUpperCase())//HELLO WORLD
 
//=========================================================================字符串截取
    /**
     * string.slice(start,[end]):提取字符串的某个部分,并以新的字符串返回被提取的部分。使用 start(包含) 和 end(不包含) 参数来指定字符串提取的部分。
     * 注意:字符串中第一个字符位置为 0, 第二个字符位置为 1, 以此类推。如果是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,
     * -1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推。且截取字符串的时候,字符串的截取到end-1的位置,即不包含end位置的字符。
     */
    console.log(str1)//hello world
    console.log(str1.slice(0,6))//hello
    console.log(str1.slice(0,-1))//hello worl
 
    /**
     * string.substr(start,[length]): 在字符串中抽取从 开始 下标开始的指定数目的字符。
     * 提示:bstr() 的参数指定的是子串的开始位置和长度,因此它可以替代 substring() 和 slice() 来使用。
     * 注意:在 IE 4 中,参数 start 的值无效。在这个 BUG 中,start 规定的是第 0 个字符的位置。在之后的版本中,此 BUG 已被修正。ECMAscript 没有对该方法进行标准化,因此反对使用它
     */
    console.log('abcderfg'.substr(2))//cderfg
    console.log('abcderfg'.substr(2,3))//cde
 
    /**
     * string.substring(start, [end]):方法用于提取字符串中介于两个指定下标之间的字符。子串包括 开始 处的字符,但不包括 结束 处的字符。
     * 注意:其中start和end都是一个非负整数,这就是和slice的区别。
     * 
     */
    console.log(str1)//hello world
    console.log(str1.substring(0,6))//hello
    console.log(str1.substring(0,str1.length -1))//hello worl
 
//==============================================================================字符串匹配类
     /**
     * string.indexOf(searchvalue,[start]):返回某个指定的字符串值在字符串中首次出现的位置.
     * string.laseIndexOf(searchvalue,[start]):返回某个指定的字符串值在字符串中最后出现的位置.
     * searchvalue:必须值,需要检索的字符串值或者一个正则表达式
     * start:可选值,字符串开始检索的位置,合法值:[0,str.length-1],默认为0
     * 如果没有找到匹配的字符串则返回 -1。 上述方法区分大小写
     */
    //。
    console.log(str.indexOf('h'))//0
    console.log(str.indexOf('h',3))//-1
    /**
     * string.match(regexp):在字符串内检索指定的值,或找到一个或多个正则表达式的匹配
     * 注意: match() 方法将检索字符串 String Object,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。如果 regexp 没有标志 g,
     * 那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。
     */
    let str3 = "The rain in SPAIN stays mainly in the plain"
    console.log(str3.match('ain'))//["ain"]
    console.log(str3.match(/ain/g))//["ain", "ain", "ain"]
 
    /**
     * string.search(searchvalue):用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,首次出现的位置。如果没有找到任何匹配的子串,则返回 -1。
     * searchvalue:必须。查找的字符串或者正则表达式。
     */
    console.log(str1.search('llo'))//2
    console.log(str1.search(/Hell/i))//0
 
 }

(3)es6字符串扩展

ES6 加强了对 Unicode 的支持,并且扩展了字符串对象。由于篇幅原因只在这里记录一些常见的方法,具体见:http://es6.ruanyifeng.com/#docs/string

{
    //字符串遍历接口:for...of循环遍历。
    for(let i of 'abc') console.log(i)//a b c
    /**
     * JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。
     * includes():返回布尔值,表示是否找到了参数字符串。
     * startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
     * endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
     */
    console.log('abc'.includes('d'))
    console.log('abc'.startsWith('ab'))
    console.log('abc dd'.endsWith('c'))
    console.log('abc'.endsWith('abc'))

    /**
     * string.repeat(argv)方法返回一个新字符串,表示将原字符串重复n次。
     * argv:小数会被去整,负数会报错,参数是 0 到-1 之间的小数,则等同于 0,这是因为会先进行取整运算。0 到-1 之间的小数,取整以后等于-0,repeat视同为 0。NaN等同0,如果是字符串会转换成数字
     */
    console.log('ab'.repeat(2))//abab
    console.log('ab'.repeat(2.4))//abab
    console.log('ab'.repeat(-0.9))//""
    console.log('ab'.repeat(NaN))//""
    console.log('ab'.repeat('ab'))//""
    console.log('ab'.repeat('3'))//"ababab"

    /**
     * matchAll方法返回一个正则表达式在当前字符串的所有匹配,详见《正则的扩展》的一章。
     */
    let str3 = "The rain in SPAIN stays mainly in the plain"
    console.log(str3.match(/ain/g))//["ain", "ain", "ain"]
    // console.log(str3.matchAll('ain'))//["ain", "ain", "ain"]我当前node不支持该方法

    /**
     * 模板字符串:是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
     * 使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。
     */
    let name = "jym"
    console.log(`hello ${name}`)//hello jym
}

(4)es2017:

{
    /**
     * es2017:引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
     * 注意:原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串。如果用来补全的字符串与原字符串,两者的长度之和超过了最大长度,则会截去超出位数的补全字符串。
     */
    console.log('abc'.padStart(5,'xyo'))//xyabc
    console.log('abc'.padEnd(5,'xyo'))//abcxy
    console.log('abc'.padStart(5))//"  abc"
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值