正規表示式可以用來幹什麼?用來匹配字串中字元組合的模式。在平常的學習和工作中我們也經常用到正規表示式,比如表單的輸入框中使用對應的正規表示式去校驗輸入的**號碼格式是否正確等。
方式1:使用字面量,固定/表示式內容/
let reg = d/; 匹配0-9的數字方式2:使用
regexp
建構函式。
let reg = new regexp('\d');匹配0-9的數字備註:完整的特殊字元可以檢視官方文件哦,這裡只列舉部分常用的特殊字元。
示例:
let reg = d[a-za-z]+$匹配以數字開頭,小寫字母結尾,中間部分包含1個至多個大小寫字母。2frzs').match(reg); 2frzs', index: 0, input: '2frzs', groups: undefined]
示例:匹配不區分小大寫的指定字元。
// 不新增可選標識。let reg = a-z]/
asz').match(reg); s', index: 1, input: 'asz', groups: undefined]
新增ilet reg = a-z]/i
asz').match(reg); a', index: 0, input: 'asz', groups: undefined]
regexp.lastindex
:標識索引從**開始下乙個匹配。
regexp.prototype.ignorecase
:是否忽略大小寫。
regexp.prototype.global
:針對字串中所有可能的匹配項測試正規表示式,還是僅針對第乙個匹配項。
regexp.prototype.sticky
:是否是sticky
regexp.prototype.unicode
unicode
功能是否開啟。
這些屬性可以用來檢查是否使用了可選引數。
正規表示式可以用於:
regexp
的test()
exec()
和tostring()
方法,compile()
已棄用
string
的match()
matchall
replace()
search()
split()
和replaceall()
方法。
test()
:使用正規表示式在字串中測試指定的值是否匹配,返回true
或false
let reg = d/ /匹配數字。示例:正規表示式新增全域性搜尋reg.test('aaasa') false
reg.test('aaa2a') true
g
標誌。
let reg = d/g //全域性匹配判斷是否包含數字。上面示例突然不理解了,為什麼連續使用reg.test('a8ab9g0') true
reg.test('a8ab9g0') true
reg.test('a8ab9g0') true
reg.test('a8ab9g0') false
reg.test('a8ab9g0') true
test()
輸出的結果會不一樣,有它自己的一套迴圈結果模式,示例是迴圈輸出true true true false
?書都翻爛了終於找到了對它的解說。
解釋示例:
let reg = d/g看到while (reg.test('a8ab9g0'))
console.log(reg.lastindex)
reg.lastindex
想必你已經很清楚為什麼了吧,lastindex
是當前表示式匹配內容的最後乙個字元的下乙個位置。在字串a2ab4g2
中先全域性查詢匹配到
,它的最後乙個字元的下乙個位置就是
;然後再去查詢匹配字元,找到
,進行第二次匹配,此時
字元的下乙個位置就是
了,依次類推,只要查詢的字串中存在匹配字元,lastindex
的會依次變化。這種變化發生在識別符號g
全域性搜尋的時候總結:如果正規表示式設定了全域性標誌,test()
的執行會改變正規表示式的lastindex
屬性,連續執行test()
方法,後續執行將會從lastindex
處開始匹配。
exex()
:使用正規表示式在字串中執行查詢匹配指定的值,返回乙個陣列,未匹配到返回null
示例1:
let reg = d/reg.exec('a2ab4g2') 2', index: 1, input: 'a2ab4g2', groups: undefined]
exec()
返回的是乙個陣列,第一項是匹配到的字串,第二項是原始字串基於0開始的索引位置,第三項是匹配的原始字串,第四項是乙個命名捕獲組物件,若未定義命名捕獲組,值為undefined
示例2:
let reg = d/g可以看到,while (reg.exec('a8ab9g0'))
console.log(reg.lastindex)
exec()
和test()
方法在正規表示式新增了全域性標識g
之後,都會去更新正規表示式物件的lastindex
屬性。
tostring()
:返回乙個表示該正規表示式的字串。
let reg = d/g注意:reg.tostring('a2ab4g2') d/g"
regexp
物件是覆蓋object
物件的tostring()
方法,不是繼承object.prototype.tostring()
match()
:在字串中執行查詢匹配,返回乙個陣列,未匹配返回null
str.match(reg)
的目標引數是string
,返回的陣列中,包含了匹配到的所有結果,沒有匹配到返回null
let reg = d/ga2ab4g2').match(reg) /2', 4', 2']
ssssss').match(reg) /null
matchall()
:在字串中執行查詢所有匹配,返回乙個迭代器。
let reg = d/g上例中,let result = a2ab4g2').matchall(reg);
console.log(array.from(result, x =>x[0]))2', 4', 2']
x
是撒?比如第一項x
的值為['2', index: 1, input: 'a2ab4g2', groups: undefined]
,是不是很眼熟呢?和exec()
方法的返回值一樣。
search()
:在字串中查詢匹配到的第乙個項內容,返回匹配到的索引位置,不存在返回 -1。
let reg = d/ga2ab4g2').search(reg);/1
ssss').search(reg);/1
split()
:使用正規表示式或字串分隔乙個字串,並將分隔後的子字串儲存到陣列中。
常用在我們想要將字串按某個規則分割為陣列的場景。
let reg = d/a2ab4g2').split(reg); a', ab', g',
sgh2hfj').split(reg); sgh', hfj']
replace()
:在字串中查詢匹配的值,使用替換字串替換匹配到的值。
未新增全域性搜尋標識,如下面示例,可以看出replace()
是替換第乙個匹配到的字元為指定字元。
let reg = d/新增全域性搜尋標識,如下面示例,會把查詢到的所有字元進行替換操作。a2ab4g2').replace(reg, 'w');awab4g2
let reg = d/ga2ab4g2').replace(reg, 'w');awabwgw
replaceall()
:返回乙個新字串,替換全域性匹配到的字串。
let reg = d/g注意:當a2ab4g2').replaceall(reg, 'w');awabwgw
replaceall
使用的第乙個引數是regex
時,必須設定全域性標識g
,否則會報錯:uncaught typeerror: string.prototype.replaceall called with a non-global regexp argument at string.replaceall
以上內容簡單的描述了j**ascript
中正規表示式的基本建立與使用,後續介紹正規表示式的高階使用方法。
歡迎關注+點讚+收藏+評論+**原創不易,我會持續更新更多優質文章。
關注***前端開心果」,專注於前端技術的學習、分享與交流,包括web前端基礎知識、高階技術、學習資料、工具技巧、**教程、面試題等資訊。
使用 JavaScript 指令碼來進行複雜的查詢改寫
有這麼乙個需求 閘道器裡怎樣對跨集群搜尋進行支援的呢?我想實現 輸入的搜尋請求是lp 9200 index1 search這個索引在 3 個集群上,需要跨集群檢索,也就是閘道器能否改成lp 9200 cluster01 index1,cluster02,index1,cluster03 index1...
機械表和石英表的區別
鄭州手錶售後維修中心位於鄭州市二七區明主路10號華潤大廈2905室。雖然每個人都有手機和計時功能,但時鐘並沒有退出歷史舞台,因為時鐘不僅是計時工具,更是裝飾和寄託的載體。在購買手錶時,你會發現手錶的種類數不勝數,但人們更常見的石英表和機械表,這兩種更受歡迎。那麼石英表和機械表有什麼不同呢?我們和編輯...
華為“一人一表”的“表內資產”
多肽鏈 原創出品作者 嚴睿 宋思夢1.41億糖尿病患者 2.45億高血壓患者 3.3億心血管患者 在中國,龐大的慢性病人口基數和且還在快速增長的勢頭,是個嚴峻的挑戰。對於實現 健康中國 戰略的偉大目標來說,國民健康水平的提公升必須要掌握慢病管理的主動權,以緩解醫療系統及醫療支付帶來的巨大壓力。疫情改...