正則表達式的實戰演練

怎麼知道自己會不會?做題目就知道了。

跟密碼有關的格式

設定密碼時常會碰到「大小寫」、「數字」和「特殊符號」之類的問題,所以這篇附上一個範例:

1
2
3
4
// 必須包含大小寫英文、數字、特殊符號,且最短長度為 8
const rule = `(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$`
const regExp = new RegExp(rule)
console.log(regExp.test('aaaA2a@!'))

這段規則可以拆成這樣來解讀:

  • 至少一個大寫字母 (?=.*?[A-Z])
  • 至少一個小寫英文字母 (?=.*?[a-z])
  • 至少有一位數字 (?=.*?[0-9])
  • 至少有一個特殊字符 (?=.*?[#?!@$%^&*-])
  • 最小八個長度 .{8,}

那個問題很多的日期格式

請你建立一個可以驗證 2021/12/15 這個格式的規則:

1
2
const regExp = /^\d{4}\/\d{2}\/\d{2}$/
console.log(regExp.test('2021/12/15')) // true

做的很好,但現在有些使用者抱怨說:「很煩欸?我就習慣打『2021-12-15』不行嗎?」

所以現在你要建立一個可以支援 2021/12/152021-12-15 這兩個格式的規則:

1
2
3
const regExp = /^\d{4}[\/-]\d{2}[\/-]\d{2}$/
console.log(regExp.test('2021/12/15'))
console.log(regExp.test('2021-12-15'))

拿到的資料格式好亂

這邊假設資料的格式都是以「連續的英文或數字」來組成。但很不幸的是,在你拿到這些資料的時候,發先參雜了很多不必要的字元(逗號、換行、分隔):

1
2
3
4
5
const data = `
sn001,
sn002,
sn003
`

所以請你想辦法建立一個規則,讓最後處裡完後的資料是 ['sn001', 'sn002', 'sn003'] 這個格式:

1
2
3
4
5
6
7
8
const data = `
sn001,
sn002,
sn003
`
const regExp = /[A-Za-z0-9]+/g
const realData = data.match(regExp)
console.log(realData)

可以幫我處理一下嗎,我都放在 * * 裡面了

你的好朋友阿吉最近設計了一款藏文遊戲,這個遊戲是要在時間內從一串假文中找出關鍵字,然後把這些關鍵字組合成一段完整的句子。

阿吉為了怕自己哪天回來看的時候找個老半天,阿吉在自己的草案裡都會用 * 來把關鍵字給標記起來。

現在阿吉知道你剛學了正規表達式,所以希望你幫忙寫一個程式,可以讓他把「包在 *...* 的文字給取出來」,好讓他每次可以少掉 50% 的時間在檢查自己的藏文字遊戲。

1
2
3
4
const paragraph = `Lorem Ipsum *star* is simply dummy text of the *burst* and *stream* industry.`

const regExp = /\*.*?\*/g
console.log(paragraph.match(regExp)) // ['*star*', '*burst*', '*stream*']
mentor-program-day05 正則表達式
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×