Javascript 字符串

2017-11-10  本文已影响0人  TingsLee

字符串在JS中是一种基础类型,也是很长用的一种类型,但是他有很多自己的方法可以使用,下面进行一下总结。

  1. length: 获取字符串的长度

    'hello world'.length    // 11
    
  2. charAt(): 返回在指定位置的字符

    'hello world'.charAt(4)   // o
    
  3. charCodeAt(): 返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。

    'hello world'.charCodeAt(4)   // 111
    

4.concat():连接两个或多个字符串

  'hello world'.concat('123', '456')   // hello world123456

一般使用+进行字符串的拼接,在ES6中可以使用``模版处理字符串拼接问题,更高效,方便。

  1. fromCharCode(): 可接受一个指定的 Unicode 值,然后返回一个字符串,是charCodeAt的逆过程。

     String.fromCharCode(72,69,76,76,79)   // 'HELLO'
    
  2. indexOf(): 可返回某个指定的字符串值在字符串中首次出现的位置

     'hello world'.indexOf('l', 1)     // 2
    
  3. toLowerCase(): 把字符串转换为小写

     'HELLO WORLD'.toLowerCase() // hello world
    
  4. toUpperCase() : 把字符串转换为大写。

    'hello world'.toUpperCase() // HELLO WORLD

以上方法比较使用起来比较容易,下面介绍的方法使用起来稍微复杂,replace, 但是也更长用到:

  1. 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 执行的操作是相反的

  1. seach(): 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串

    'hello world'.search('l') // 2
    'hello world'.search(/\s/) // 5
    

search()方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexplastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。

  1. 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() 则用字符位置和长度来指定子串。

  1. 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 - #$*%`
上一篇下一篇

猜你喜欢

热点阅读