摘要:什么是正則表達式正則表達式其實就是,在一個字符串序列中,按照你自己想要的匹配模式,將字符串搜索或替換的過程正則表達式結(jié)構(gòu)正則表達式主體修飾符可選實例如下解析是一個正則表達式,其中是一個正則表達式主體,是一個修飾符搜索不區(qū)分大小寫使用正則表達
什么是正則表達式?
正則表達式其實就是,在一個字符串序列中,按照你自己想要的匹配模式,將字符串搜索或替換的過程
正則表達式結(jié)構(gòu)/正則表達式主體/修飾符(可選) //實例如下: const patr = /china/i
解析: /china/i 是一個正則表達式,其中china是一個正則表達式主體,i 是一個修飾符(搜索不區(qū)分大小寫)
使用正則表達式方法 search方法檢索字符串中指定的字符串,并且返回子串的起始位置
const str = "hello world!"; const n = str.search(/hello/); console.log(n); //輸出結(jié)果為0replace方法
在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串
const str = "hello world!"; const newstr = str.replace(/hello/, "hi"); console.log(newstr); //輸出結(jié)果為hi world!match方法
可在字符串內(nèi)檢索指定的值,或找到一個或多個正則表達式的匹配,但是它返回指定的值,而不是字符串的位置
const str = "hello world!"; const arr = str.match(/o/g); console.log(arr); //輸出結(jié)果["o", "o"]test方法
用于檢測一個字符串是否匹配某個模式,如果字符串中含有匹配的文本,則返回 true,否則返回 false
const str = "hello word!"; const regx = /o/; const flag = regx.test(str); console.log(flag); //輸出結(jié)果trueexec方法
返回一個數(shù)組,其中存放匹配的結(jié)果。如果未找到匹配,則返回值為 null
const str = "abc123abc321"; const pattern = /^abc/g; const flag = pattern.exec(str); console.log(flag); //["abc", index: 0, input: "abc123abc321", groups: undefined]常見的正則表達式修飾符 i 不區(qū)分(ignore)大小寫
/abc/i 可以匹配 abc、aBC、Abcg 全局(global)匹配
如果不帶g,從左往右搜索,找到第一個符合條件就返回;如果帶g,則從左往右,找到每個符合條件的都記錄下來,如下:
const str = "hello world!"; const n1 = str.match(/o/g); console.log(n1); //輸出結(jié)果["o", "o"] const n2 = str.match(/o/); console.log(n2); //輸出結(jié)果["o", index: 4, input: "hello world!"]m 多(more)行匹配
如果字符串中存在n并且有開始^或結(jié)束$符的情況下,會默認作為一個換行符,g只匹配第一行,加上m則可以匹配多行,如下:
const str = "hello world hello world good hello"; const n1 = str.match(/^hello/gm); console.log(n1); //輸出結(jié)果:["hello", "hello"] const n2 = str.match(/world$/g); console.log(n2); //輸出結(jié)果:null
n2輸出為null,是因為沒有m則只匹配第一行,第一行中沒有與之匹配的字符串,所有輸出null
正則表達式語法 定位符 ^ 符:匹配字符串開始的位置const str = "hello world!"; const pattr1 = /^hello/; const flag1 = pattr1.test(str); console.log(flag1); //輸出結(jié)果:true const pattr2 = /^world/; const flag2 = pattr2.test(str); console.log(flag2); //輸出結(jié)果:false$ 符:匹配字符串結(jié)束的位置
const str = "hello world"; const pattr1 = /hello$/; const flag1 = pattr1.test(str); console.log(flag1); //輸出結(jié)果:false const pattr2 = /world$/; const flag2 = pattr2.test(str); console.log(flag2); //trueb 符:單詞邊界匹配,匹配單詞的開頭或結(jié)尾的位置,匹配的是一個位置
const str = "word"; const pattern1 = /word/; const flag1 = pattern1.test(str); console.log(flag1); //true const pattern2 = /word/; const flag2 = pattern2.test(str); console.log(flag2); //true const str1 = "hello,world" const pattern3 = /hello/; const flag3 = pattern3.test(str1); console.log(flag3); //true const pattern4 = /helloworld/; const flag4 = pattern4.test(str1); console.log(flag4); //false
如果b在模式的開頭和結(jié)尾那沒有問題,但是如果b在兩個單詞之間,則得都符合b左右匹配的模式
B 符:非單詞邊界匹配,其實就是b的相反,b匹配的是單詞,而B匹配的是非單詞const str = "hello, 你好!我是小明!"; const pattern1 = /B/; const arr1 = str.split(pattern1); console.log(arr1); // 輸出結(jié)果:["h", "e", "l", "l", "o,", " ", "你", "好", "!", "我", "是", "小", "明", "!"] const pattern2 = //; const arr2 = str.split(pattern2); console.log(arr2); // 輸出結(jié)果:["hello", ", 你好!我是小明!"]
從上面例子中可以看出,b是可以把單詞匹配出來,而B不管是什么都分隔,如果在一個字符串中,有中英文,符合等等組成,如果要把里面的單詞多帶帶提取出來,則可以使用b來提取單詞
特殊字符 . 符:匹配除換行符以外的任意單字符const str = " "; const pattern = /./gm; const flag1 = pattern.test(str); console.log(flag1); //falsew 符:匹配字母或數(shù)字或下劃線(等價于"[A-Za-z0-9_]")
const str = "^^##hello, 123"; const pattern = /^w/; const flag1 = pattern.test(str); console.log(flag1); //false
const str = "你好hello!"; const pattern = /^w/; const flag = pattern.test(str); console.log(flag); // false
如果頭部是漢字或者符號(除下劃線),則返回false
W:用于匹配所有與w不匹配的字符 s 符:匹配任意的空白符(等價于 [ fnrtv])const str = "abc"; const pattern = /s/; const flag1 = pattern.test(str);; console.log(flag1); // false const str1 = "abc cde"; const flag2 = pattern.test(str1); console.log(flag2); // trueS 符:匹配除單個空格符之外的所有字符(非s) d 符:匹配數(shù)字
const str = "123"; const pattern = /d/; const flag1 = pattern.test(str); console.log(flag1); // true const str1 = "abc"; const flag2 = pattern.test(str1); console.log(flag2); // false限定符 * 符:匹配前面的子表達式重復(fù)出現(xiàn)0次或多次(可有可無)
const str = "123abc###"; const pattern = /(d)*/; const flag1 = pattern.test(str); console.log(flag1); // true+ 符:匹配前面的子表達式重復(fù)出現(xiàn)一次或更多次(至少一次)
const str = "abc###"; const pattern = /(d)+/; const flag1 = pattern.test(str); console.log(flag1); // false const str2 = "123"; const flag2 = pattern.test(str2); console.log(flag2); // true? 符:匹配前面的子表達式重復(fù)出現(xiàn)零次或一次
const str = "eee123"; const pattern = /h+?/; const flag = pattern.test(str); console.log(flag); //false
當?跟在+后面的時,則此時必須出現(xiàn)一次,?一般都是跟在限定符后面的
{n} 符:匹配確定的 n 次(n為非負數(shù)整數(shù))const str = "type"; const pattern = /t{2}/; const flag = pattern.test(str); console.log(flag); // false
t得要有兩個才能匹配,這里不滿足2個,所有返回false
{n,} 符:至少匹配n 次(n為非負整數(shù))const str = "ttypet"; const pattern = /t{2,}/; const flag = pattern.test(str); console.log(flag); // true
這里t至少得重復(fù)出現(xiàn)2次才可以被匹配
{n,m} 符:最少匹配 n 次且最多匹配 m 次(nconst str = "food"; const pattern = /o{1,4}/; const flag = pattern.test(str); console.log(flag); // true //o出現(xiàn)2次,1<2<4
const str = "food"; const pattern = /o{3,4}/; const flag = pattern.test(str); console.log(flag); // false //o出現(xiàn)2次,不屬于3到4的范圍方括號 [abc]:查找方括號之間的任何字符
const str = "my name is lucy!"; const pattern = /^[lpo]/; const flag = pattern.test(str); console.log(flag); // false
const str = "my name is lucy!"; const pattern = /^[mpo]/; const flag = pattern.test(str); console.log(flag); // true1:查找任何不在方括號之間的字符
const str = "my name is lucy!"; const pattern = /^[^mpo]/; const flag = pattern.test(str); console.log(flag); // false
const str = "my name is lucy!"; const pattern = /^[^lpo]/; const flag = pattern.test(str); console.log(flag); // true[0-9]:查找任何從 0 至 9 的數(shù)字
const str = "hello,123"; const pattern = /[0-9]$/; const flag = pattern.test(str); console.log(flag); // true[a-z]:查找任何從小寫 a 到小寫 z 的字符
const str = "hello,123"; const pattern = /^[a-z]/; const flag = pattern.test(str); console.log(flag); // true[A-Z]:查找任何從大寫 A 到大寫 Z 的字符
const str = "hello,123"; const pattern = /^[A-Z]/; const flag = pattern.test(str); console.log(flag); // false簡單正式表達式實例 1.只能是數(shù)字或英文
const str1 = "123456"; const str2 = "你好,123"; const str3 = ""; const pattern = /^[a-zA-Z0-9]+$/; const flag1 = pattern.test(str1); const flag2 = pattern.test(str2); const flag3 = pattern.test(str3); console.log(flag1); // true console.log(flag2); // false console.log(flag3); // false2.中英文開頭
const str1 = "中文+++123"; const str2 = "word123你好"; const str3 = "321wrod"; const pattern = /^[u4e00-u9fa5A-Za-z]+/; const flag1 = pattern.test(str1); const flag2 = pattern.test(str2); const flag3 = pattern.test(str3); console.log(flag1); // true console.log(flag2); // true console.log(flag3); // false
這里開頭以中英文開頭,則
^[u4e00-u9fa5A-Za-z]+
除了開頭要中英文,后面部分隨意都可以,沒有限制
3.校驗數(shù)值最多保留兩位小數(shù)
const str1 = 45; const str2 = 45.5; const str3 = 45.55; const str4 = 0.111; const pattern = /^[0-9]+(.[0-9]{0,2})?$/; const flag1 = pattern.test(str1); const flag2 = pattern.test(str2); const flag3 = pattern.test(str3); const flag4 = pattern.test(str4); console.log(flag1); // true console.log(flag2); // true console.log(flag3); // true console.log(flag4); // false
這里可以分成兩部分,一部分是整數(shù)部分,如下:
^[0-9]+
再一部分是小數(shù)部分,如下:
(.[0-9]{0,2})?
小數(shù)可以保留一位或者兩位或者不保, ? 表示0次或者一次
4.網(wǎng)址URL驗證const str1 = "www.baidu.com?id=123"; const str2 = "cnds.tang-123/china"; const str3 = "www.baidu.com311"; const pattern = /^([w-]+.)+[w-]+([w-./?%&=]*)$/; const flag1 = pattern.test(str1); const flag2 = pattern.test(str2); const flag3 = pattern.test(str3); console.log(flag1); // true console.log(flag2); // true console.log(flag3); // false
開頭只能是數(shù)字或字母或下劃線或-至少得一個,則:
^([w-]+.)+
中間部分也至少得有一次
[w-]+
到后面的那部分隨意,可有可無
([w-./?%&=]*)
本章節(jié)主要就是簡單介紹了正則表達式的一些常用的東西,有不對的地方大家可以指出哈
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/100161.html
摘要:如果遇到非常的復(fù)雜的匹配,正則表達式的優(yōu)勢就更加明顯了。關(guān)于正則表達式書寫規(guī)則,可查看,上面說的很清楚了,我就不貼出來了。替換與正則表達式匹配的子串,并返回替換后的字符串。結(jié)語正則表達式并不難,懂了其中的套路之后,一切都變得簡單了。 前言 在正文開始前,先說說正則表達式是什么,為什么要用正則表達式?正則表達式在我個人看來就是一個瀏覽器可以識別的規(guī)則,有了這個規(guī)則,瀏覽器就可以幫我們判斷...
摘要:舉例一使用這個正則,打印結(jié)果為使用這個正則,打印結(jié)果為舉例二打印結(jié)果如下過濾標簽?zāi)愫妹利惖纳虾O朕D(zhuǎn)化成你好,美麗的上海如果后面加,就會進入非貪婪模式。如果后面不加,就會進入貪婪模式,結(jié)果為上海。你好美麗的上海。 1.創(chuàng)建一個正則表達式 方法一:使用一個正則表達式字面量,其由包含在斜杠之間的模式組成。 var reg1 = /a/; var reg2 = /ab+c/; 方法二:調(diào)用Re...
摘要:舉例一使用這個正則,打印結(jié)果為使用這個正則,打印結(jié)果為舉例二打印結(jié)果如下過濾標簽?zāi)愫妹利惖纳虾O朕D(zhuǎn)化成你好,美麗的上海如果后面加,就會進入非貪婪模式。如果后面不加,就會進入貪婪模式,結(jié)果為上海。你好美麗的上海。 1.創(chuàng)建一個正則表達式 方法一:使用一個正則表達式字面量,其由包含在斜杠之間的模式組成。 var reg1 = /a/; var reg2 = /ab+c/; 方法二:調(diào)用Re...
摘要:舉例一使用這個正則,打印結(jié)果為使用這個正則,打印結(jié)果為舉例二打印結(jié)果如下過濾標簽?zāi)愫妹利惖纳虾O朕D(zhuǎn)化成你好,美麗的上海如果后面加,就會進入非貪婪模式。如果后面不加,就會進入貪婪模式,結(jié)果為上海。你好美麗的上海。 1.創(chuàng)建一個正則表達式 方法一:使用一個正則表達式字面量,其由包含在斜杠之間的模式組成。 var reg1 = /a/; var reg2 = /ab+c/; 方法二:調(diào)用Re...
摘要:一前言正則表達式入門實踐系列文章適合熟悉至少使用過正則表達式的同學(xué),在文章開始的時候我們都會帶著問題去思考如何正確應(yīng)用正則表達式解決出現(xiàn)的問題,在解決問題的過程中增長你的知識,提高你的實踐能力。 一 前言 正則表達式入門實踐系列文章適合熟悉至少使用過正則表達式的同學(xué),在文章開始的時候我們都會帶著問題去思考如何正確應(yīng)用正則表達式解決出現(xiàn)的問題,在解決問題的過程中增長你的知識,提高你的實踐...
摘要:對于含有量詞正則表達式,量詞是貪婪模式,會優(yōu)先選擇盡可能多的匹配修飾的字符,所以該表達式會優(yōu)先選擇匹配一個字符,當匹配不到時再選擇不匹配字符。 正則表達式的語法 普通字符 字母、數(shù)字、漢字、下劃線以及一些沒有特殊定義的標點符號,都屬于普通字符,正則表達式中的普通字符匹配字符本身,如: var str = abced console.log(str.match(/a/)) // [a,...
閱讀 3300·2021-11-23 09:51
閱讀 2911·2021-10-28 09:33
閱讀 875·2021-10-08 10:04
閱讀 3682·2021-09-22 15:13
閱讀 1016·2019-08-30 15:55
閱讀 2906·2019-08-30 15:44
閱讀 564·2019-08-30 13:04
閱讀 2938·2019-08-30 12:56