JavaScript:內建類和方法:字串 / 正則

wjaning發表於2021-09-09

字串

字串可以理解為由單個字元組成的陣列。所以它可以像陣列一樣使用:

  • 屬性: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():非常奇怪


    • 返回的是一個“只有一個元素的陣列”,

    • 而且這個陣列裡又還包含了一些其他屬性(index啥的),

    • 同時這個方法還可以反覆呼叫,依次查詢……

    • 找不到的話,返回null

    • 如果找到的話,
      這個汗啊,-_-||

  • 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……


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2983/viewspace-2826887/,如需轉載,請註明出處,否則將追究法律責任。

相關文章