Javascript 字符串

字符串在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 - #$*%`
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,738评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,377评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,774评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,032评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,015评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,239评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,724评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,374评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,410评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,457评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,132评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,733评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,804评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,022评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,515评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,116评论 2 341

推荐阅读更多精彩内容