正則表達式的總結

最近從新複習了一下正則表達式,如果平時沒怎麼使用的話,就會很容易忘記用法。編程這種東西的話,除了對概念基礎須要紮實之外,還須要多練多寫javascript

關於正則表達式的學習的,我看的是掘金做者 scq000 的文章: 正則表達式不要背java

我的感受文章裏面寫得是至關不錯了,很容易理解。至於正則語句的編寫,不少狀況下都是須要結合當前環境設計的,須要的是思路和經驗正則表達式

在這裏的話,主要是記錄下JavaScript中會用到正則表達式的幾個函數,便於平常中的使用編程

1、str.match(regexp)

檢索返回一個字符串匹配正則表達式的的結果數組

返回值:函數

  • 若是使用g標誌,則將返回與完整正則表達式匹配的全部結果(Array),但不會返回捕獲組;或者未匹配null
  • 若是未使用g標誌,則僅返回第一個完整匹配及其相關的捕獲組(Array),在這種狀況下,返回的項目將具備groups(一個捕獲數組或undefined)/index(匹配結果的開始位置)/input(搜索的字符串)屬性;或者未匹配null

舉兩個例子:post

// 沒有g標誌的狀況
let str = 'For more information, see Chapter 3.4.5.1'
let re = /see (chapter \d+(\.\d)*)/i
let found = str.match(re)

console.log(found)

// logs ['see Chapter 3.4.5.1',
// 'Chapter 3.4.5.1',
// '.1',
// index: 22,
// input: 'For more information, see Chapter 3.4.5.1']

// 'see Chapter 3.4.5.1' 是整個匹配。
// 'Chapter 3.4.5.1' 被'(chapter \d+(\.\d)*)'捕獲。
// '.1' 是被'(\.\d)'捕獲的最後一個值。
// 'index' 屬性(22) 是整個匹配從零開始的索引。
// 'input' 屬性是被解析的原始字符串。
複製代碼
// 使用g標誌的狀況
let str = 'For more information, see Chapter 3.4.5.1, see Chapter 3.4.5.1'
let re = /see (chapter \d+(\.\d)*)/ig
let found = str.match(re)

console.log(found)

// logs ['see Chapter 3.4.5.1', 'see Chapter 3.4.5.1']
複製代碼

能夠看出二者的區別,在沒有使用g標誌的時候,在正則表達式中有分組(即有'('和')',詳細看基礎知識),也會將其捕獲並放入結果中對應的位置。在使用g標誌的時候,則只會將符合的結果放入結果中學習

在不傳參數的時候,則返回[""],在傳入一個非正則表達式對象做爲參數的時候,則會使用new RegExp來隱式轉換。固然了,通常狀況下不會有這兩種詭異的操做的吧ui

2、regexObj.test(str)

執行一個檢索,用來查看正則表達式與指定的字符串是否匹配spa

返回值: true / false

let str = 'hello world!'
let result = /^hello/.test(str)
console.log(result)
// true
複製代碼

當設置全局標誌g的正則使用test方法,在執行時會改變正則表達式的lastIndex屬性。若連續執行test,後續的執行會將從lastIndex處開始匹配字符串(遇false後lastIndex歸0),如:

let regex = /foo/g;

// regex.lastIndex is at 0

regex.test('fooxxfooiifo') // true
// regex.lastIndex 3

regex.test('fooxxfooiifo') // true
// regex.lastIndex 8

regex.test('fooxxfooiifo') // false
// regex.lastIndex 0
複製代碼

這是須要注意的地方,否則可能會因使用方式不對致使結果出錯

3、regexObj.exec(str)

在一個指定字符串中執行一個搜索匹配

返回值:

  • 若是匹配成功返回一個數組,並更新正則表達式對象的屬性。返回的數組將徹底匹配成功的文本做爲第一項,將正則括號裏匹配成功的做爲數組填充到後面
  • 若是匹配失敗,返回null
let re = /quick\s(brown).+?(jumps)/ig
let result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog')
// !此時re的lastIndex會變成25

console.log(result)
// log ["Quick Brown Fox Jumps" 匹配的所有字符串
// "Brown" 括號中的分組捕獲
// "Jumps" 括號中的分組捕獲
// groups: undefined 
// index: 4 匹配到的字符開始下標
// input: "The Quick Brown Fox Jumps Over The Lazy Dog"
// length: 3]
複製代碼

當正則表達式使用全局標誌g時,跟test同樣都會每次改變正則的lastIndex,直到遇到結果爲null時,lastIndex重置爲0

4、str.search(regexp)

執行正則表達式和 String 對象之間的一個搜索匹配 返回值:

  • 若匹配到,正則表達式在字符串中首次匹配項的索引
  • 不然返回-1
let str = "hey JudE"
let re = /[A-Z]/g
let re2 = /[.]/g
console.log(str.search(re)) // 4
console.log(str.search(re2)) // -1
複製代碼

5、str.replace(regexp, newstr|function)

看一下MDN哈哈

6、str.split(regexp)

看一下MDN哈哈

相關文章
相關標籤/搜索