JavaScript:内置类和方法:字符串 / 正则

更多
2021年01月14日 11点26分 作者:叶飞 修改

字符串

字符串可以理解为由单个字符组成的数组。所以它可以像数组一样使用:

  • 属性:length
  • 下标[]:(从0开始)

但是,注意:字符串是“不可更改(imutable)”的,所以str[3]='x'无效,同样的,以下所有字符串方法都会修改字符串,而是返回一个字符串。

以下方法皆通过字符串对象调用,是实例方法:

  • toUpperCase()/toLowerCase():转换为大写/小写,主要用于忽略大小写的比较(先转换再比较)
    if(str.toLowerCase() == 'feige'){ 
  • indexOf(target):返回target在字符串中的位置(索引值),找不到就返回-1
    '源栈欢迎你'.indexOf('你')   //4
    '源栈欢迎你'.indexOf('飞哥')   //-1
    
  • substring(?start, ?end) :截取从start开始(默认为0),到end为止(默认为最后)的字符串
    '源栈欢迎你'.substring(2,4)    //'欢迎'
    '源栈欢迎你'.substring(2)      //'欢迎你'
    substring()经常和indexOf()联合使用,@想一想@:干嘛用呢?


RegExp

复习:正则表达式

示范查出:

  • 所有的a标签:<a.*?/a>
  • 所有带class属性的a标签:<a[^//a]*?class.*?/a>

创建正则表达式:

  • 字面量:两个斜杠(//)包裹,如:/<a.*?\/a>/gi,注意不要加引号
转义:'\'\''
  • RegExp构造函数:(表达式会动态改变时使用)
    var regex = new RegExp("<a.*?/a>", "gi");

gim是指示标志(flag):g=>global(在match()和exec()中体现差异),i => ignore case,m=>multiple line

  • test():Regexp方法,返回 true/false
  • exec():Regexp方法,返回 array/null
    返回的是数组,但是数组中只有一个元素:第一次匹配成功的字符串
            var reg = /<a.*?>/gim,
                li = `<li class="dropdown-header">督导班</li>
                            <li><a href="/Course/Confusion/New"><span class="fa fa-eye"></span> 督导班</a> </li>
                            <li><a href="/Course/Confusion/Edit"><span class="fa fa-edit"></span> 疑问发布</a> </li>
                            <li><a href="/Course/Confusion"><span class="fa fa-list"></span> 疑问列表</a> </li>
                            <li class="divider"></li>
                            <li><a href="/Problem?excludeCanceled=true&excludeRewarded=true"><span class="fa fa-list"></span> 列表</a> </li>
                            <li><a href="/Problem/New"><span class="fa fa-edit"></span> 发布</a></li>`;
            //非常非常坑的函数:返回的是一个数组,数组中却始终只有一个元素,还需要while循环才能取出所有匹配结果
            while ((result = reg.exec(li)) !== null) {
                console.log(result[0] + ': ' + reg.lastIndex);
            };
            console.log(result);



以下几个方法,参数可以是字符串,也可以是正则表达式:

  • search():同indexOf()

  • match():非常奇怪
    • 找不到的话,返回null
    • 如果找到的话,
      • 返回的是一个“只有一个元素的数组”,
      • 而且这个数组里又还包含了一些其他属性(index啥的),
      • 同时这个方法还可以反复调用,依次查找……
      这个汗啊,-_-||


  • replace(a,b):用a替换b。注意:replace()不会改变字符串的内容,需要重新赋值一次
    var result = li.replace(reg, function (match, index) {
        //match: 匹配成功的字符串
        //index:字符串所在的位置(索引)
        //return:用于替换 匹配成功字符串 的字符串
        return match.toUpperCase() + 'with index:' + index;
    });




String()和toString():

  • null和undefined没有toString()
  • 123.toString():不要问我为什么,因为这就是JavaScript……
Javascript 字符串 正则
赞: 0 踩: 0

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 0

Web前端


HTML和CSS

HTML最常用的标签和属性,含HTML5的语义标签和新属性,但不包含需要JavaScript操作的HTML5 API,以及CSS基础(简述CSS 3动画相关),以及bootstrap.js以外的Bootstrap的内容。

Javascript入门

Javascript的基本语法:为能使用JQuery和Bootstrap.js的使用打下基础

ES进阶

借助于ES6,讲解JavaScript中一些更复杂的语法特性,如作用域、闭包、面向对象、原型链、this变化、module等

JQuery和Bootstrap

JQuery类库(含Ajax),以及Bootstrap的JavaScript组件部分

全部
关键字



帮助

反馈