iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
自我挑戰組

利用30天學習JavaScript&Node.js系列 第 24

Day24- 使用正則表達式進行字串匹配

  • 分享至 

  • xImage
  •  

原本要繼續打Node的套件的,可是突然想到忘記講這個常用的東西,趕快來惡補(

前面有學到了很多有關於字串的操作。今天要來學習的是用來匹配字串的正則表達式(或叫正規表達式),這是一種表達格式,用來找尋符合需求的字串。

正則表達式的創建有兩種,一種是使用javascript的內建物件建構式-RegExp來建立,一種是利用利用/包住正則表達式來表示它:

let reg1 = new RegExp('^j');
let reg2 = /^j/;

正則表達式有許多規則,需要利用這些規則去組織想要的字串格式再去做操作。以下整理了幾個常見的正規表達式匹配字元:

  • ^: 匹配字串的開頭。
  • $: 匹配字串的結尾。
  • +: 匹配字串1次或以上。
  • *: 匹配字串0次或以上。
  • ?: 匹配字串0次或1次。
  • {n}: 規定指定的字元發生的次數,n為正整數。
  • {n,m}: 規定指定的字元發生的次數,n為最小,m為最大,n、m為正整數。
  • x|y:符合x或y字串。
  • [xyz]:為xyz的字串。
  • [^xyz]:非xyz的字串。
  • \w:匹配所有的數字字母跟底線。
  • \W:匹配所有的非數字字母跟底線。

函式的用法有下列這幾種:

  • exec():判斷字串是否符合正規表達式,若符合會回傳一個陣列裡面有關於匹配的資訊,不符合會回傳一個空值。
let str1 = "yellow";
let str2 = "greeen";
let regex = /^y/;
console.log(regex.exec(str1));
console.log(regex.exec(str2));

https://ithelp.ithome.com.tw/upload/images/20221006/20138060EyjNc89ICe.png

  • test():判斷字串是否符合正規表達式。不同於exec(),它只會回傳true或false。上一個程式碼的例子改寫成test()的結果就會變成這樣:

https://ithelp.ithome.com.tw/upload/images/20221006/201380604MAxNiCwUs.png

  • match():跟exex()差不多的東西,不過比較需要注意的是exec()是regex的方法,而match()String的方法,以下範例可以看到兩種的寫法String跟Regex是需要反過來的:
let str = "This is string.";
let regex = /[is]/;
console.log(str.match(regex));
console.log(regex.exec(str));

https://ithelp.ithome.com.tw/upload/images/20221006/20138060Tu4zgAqJk6.png

  • search():一樣是string的方法,它會回傳第一個匹配到的字串的位置:
let str = "Javascript";
let regex = /[s]/;
console.log(str.search(regex));

https://ithelp.ithome.com.tw/upload/images/20221006/20138060MLHYO1lfh2.png

正則表達式實際到底可以怎麼運用呢?假設我想判斷使用者輸入的是否為手機號碼的格式,就可以像這樣寫一個正則表達式的判斷程式:

const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
})
readline.question('請輸入手機號碼: ', (phoneNumber) => {
    const reg = /[0-9]{10}/;
    if(reg.test(phoneNumber)) console.log('手機號碼格式正確');
    else  console.log('手機號碼格式錯誤');
    readline.close();
})

https://ithelp.ithome.com.tw/upload/images/20221006/201380604XbqdrKLb8.png

這邊reg之中用了[0-9]帶表只能是0到9的數字並且限定只能有10個字元,這樣就能判斷使用者的輸入格式是否正確了。

正規表達式也用在很多像是註冊、驗證的地方,像是辦帳號的時候的檢查gmail格式等,在開發使用者系統有很大的幫助。


上一篇
Day23- 使用DayJS來操作時間(下)
下一篇
Day25- 使用robotjs自動化控制滑鼠及鍵盤
系列文
利用30天學習JavaScript&Node.js30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言