iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
Modern Web

JS 忍者訓練計畫系列 第 14

與正規表達式吵嘴(上) Day13

  • 分享至 

  • xImage
  •  

正規可以常常用在處理字串,驗證資料,也可以處理 HTML 節點、CSS 選擇器、判斷元素類別。而且是可以跨語言跟環境使用的重要技術。

這章想學到什麼?

  • 一行正規就能解決的郵遞區號問題
  • 建立正規的兩種方式
  • regex 還能加上的三種旗標
  • 其他好多好多例子:完全符合、比對字元族、跳脫、開頭與結尾、重複出現、預先定義的字元族、群組、多重選項、回朔參照

一行正規就能解決的郵遞區號問題

function isThisAZipCode(candidate) {
    return /^\d{5}-\d{4}$/.test(candidate)
}

//寫一堆的判斷式,不如一行正則表達式
function isThisAZipCode(candidate) {
    if (typeof candidate !== "string" || candidate.length != 10) return false;
    
    for (var n = 0; n < candidate.length; n++) {
        var c = candidate[n];
        switch(n) {
            case 0: case 1: case 2: case 3: case 4: 
            case 6: case 7: case 8: case 9:
                if (c < '0' || c > '9') return false;
            break;
            case 5:
                if (c != '-') return false;
                break;
        }
    }
    return true;
}

建立正規的兩種方式

var re1 = /test/i;
var re2 = new RexExp("test", "i");

re1.test("test")
re2.test("Test test")

Regex 還能加上的三種旗標

//i: 不區分大小雪

'TeST test'.match(/test/i); //TeST
'TeST test'.match(/test/); //test

//g: 比對所有符合的例子
'TeST test'.match(/test/ig); //TeST, test

//m: 可跨多行比對
//試了幾種多行的方式,不用加 m 屬性也可以比對到

const multiLine = `Say hello to 
multi-line
strings!`;
multiLine.match(/strings/ig); //strings

其他好多好多例子

完全符合
/test/

比對字元族
[abc] abc

[^abc] //除了 abc 以外

跳脫
/\[\]/

開頭與結尾
/^test$/

重複出現
/te?st/
/te*st/

預先定義的字元族
/\d/ // [0-9]
/\S/ //除了空白之外所有字元

群組
/(ab)+/

多重選項
/(ab)+|(cd)+/

回朔參照
/<(\w+)>(.+)<\/\1>/

///<(\w+)>(.+)<\/\1>/.test('<String>aaa</String>') // true

參考資料

https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Guide/Regular_Expressions
https://linux.vbird.org/linux_basic/centos7/0330regularex.php


上一篇
原型之物件導向(下) Day12
下一篇
與正規表達式吵嘴(下) Day14
系列文
JS 忍者訓練計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言