摘要:一正則表達式的定義正則表達式是一個描述字符模式的對象對象更多的是通過一種特殊的直接量語法來創建正則表達式的模式規則是由一個字符序列組成的包括所有字母和數字在內大多數的字符都是按照直接量僅描述待匹配字符的二直接量字符正則表達式中的所有字母和數
一.正則表達式的定義
1.正則表達式(regular expression)是一個描述字符模式的對象.
2.RegExp對象更多的是通過一種特殊的直接量語法來創建.
var reg = /d/;
3.正則表達式的模式規則是由一個字符序列組成的,包括所有字母和數字在內,大多數的字符都是按照
直接量僅描述待匹配字符的.
1.正則表達式中的所有字母和數字都是按照字面含義進行匹配的,
也支持非字母的字符匹配,需要通過反斜杠()作為前綴進行轉義.比如/n/用以匹配換行符.
var str = "abc12345"; // 直接量字符 var reg = /b/; console.log(str.match(reg)); // ["b", 1]三.字符類
1.將直接量字符多帶帶放進方括號內就組成了字符類.
一個字符類可以匹配它所包含的任意字符,/[abc]/就和字母"a","b","c"中的任意一個都匹配.
2.另外,可以通過^符號來定義否定字符類,它匹配所有不包含在方括號內的字符.
3.字符類可以使用連字符來表示字符范圍,/[a-z]/,[a-zA-Z0-9].
4.由于某些字符類非常常用,因此在js的正則表達式語法中,使用了這些特殊字符的轉義字符來表示他們.
5.在方括號內也可以寫這些特殊轉義字符,/[sd]/就匹配任意空白符或者數字
// 字符類 var reg = /[bc]/; console.log(str.match(reg)); // ["b", 1] var reg = /[^bc][^bc]/; console.log(str.match(reg)); var reg = /d/g; console.log(reg.test(str)); // true console.log(str.match(reg)); // [1,2,3,4,5]
[...] 方括號內的任意字符
1 不在方括號內的任意字符
. 除換行符和其他Unicode行終止符之外的任意字符
w [a-zA-Z0-9]
W 2
s 任何Unicode空白符
S 任何非Unicode空白符的字符
d [0-9]
D 3
var reg = /s/g; console.log(str.replace(reg, ""));四.重復
1.這些正則表達式語法中較為復雜的模式都提到了正則表達式中某元素的"重復出現次數".
2.我們在正則模式之后跟隨用以指定字符重復的標記.
3.在使用"*"和"?"時要注意,由于這些字符可能匹配0個字符,因此他們允許什么都不匹配.
{n,m} 匹配前一項至少n次,但不能超過m次
{n,} 匹配前一項n次或者更多次
{n} 匹配前一項n次
? 匹配前一項0次或多次,也即是說前一項是可選的,等價于{0,1}
匹配前一項1次或多次,等價于{1,}
匹配前一項0次或多次,等價于{0,}
// 重復 var reg = /d{2}/; console.log(str.match(reg)); // ["12"] var reg = /d{2,}/; console.log(str.match(reg)); // ["12345"] var reg = /d{2,4}/; console.log(str.match(reg)); // ["1234"] //郵箱 1006894640@qq.com var str = "1006894640@qq.com.cn"; var reg = /w+@w+(.w+)+/; console.log(str.match(reg));四.非貪婪的重復
1.上面列出的匹配重復時盡可能多的匹配,而且允許后續的正則表達式繼續匹配,因此,我們稱之為"貪婪的匹配".
2.我們同樣可以使用正則表達式進行非貪婪匹配,只需在待匹配的字符后跟隨一個問號即可."??","+?","*?"或"{1,5}+".
3.比如,/a+/可以匹配一個或多個連續的字母a,當使用"aaa"作為匹配字符串時,正則表達式會匹配它的三個字符.
但是/a+?也可以匹配一個或多個連續字母a,但是它盡可能少的匹配.
// 非貪婪的匹配 var str = "aaab"; var reg1 = /a+/; var reg2 = /a+?/; console.log(str.match(reg1)); // ["aaa"] console.log(str.match(reg2)); // ["a"]五.選擇,分組和引用
1.正則表達式的語法還包括指定選擇項,子表達式分組和引用前一子表達式的特殊字符.
字符"|"用于分隔供選擇的字符,例如/ab|cd|ef/可以匹配字符串"ab",也可以匹配字符串"cd","ef".
2.正則表達式中的圓括號有多種作用,一個作用是把多帶帶的項組合成子表達式,以便可以像處理一個獨立的
單元那樣用"|","*","+","?"等來對單元內的項進行處理.
// 分組,引用 var str = "javascript"; var reg1 = /java(script)?/; console.log(str.match(reg1)); // ["javascript", "script"] var str = "abc123";`` var reg = /w+(d+)/; console.log(str.match(reg)); // ["abc123", "3"]六.指定匹配位置
1.正則表達式中的多個元素才能匹配字符串的一個字符,例如s匹配的只是一個空白符,
還有一些正則表達式的元素匹配的是字符之間的位置,而不是實際的字符,例如b匹配一個單詞的邊界,即位于w和W之間的邊界.
2.像b這樣的元素不匹配某個可見的字符,它們指定匹配發生的合法位置.
有時我們稱這些元素為正則表達式的錨,因為他們將模式定位在搜索字符串的特定位置上.
最常用的錨元素是^,它用來匹配字符串的開始,錨元素$用以匹配字符串的結束.
^ 匹配字符串的開頭,在多行檢索中,匹配一行的開頭
$ 匹配字符串的結尾,在多行檢索中,匹配一行的結尾
b 匹配一個單詞的邊界,簡言之,就是位于字符w和W之間的位置,或位于字符s和字符串的開頭或結尾之間的位置
B 匹配非單詞邊界的位置
// 匹配非單詞邊界 var str1 = "javascript"; var str2 = "scripting"; var reg1 = /script/; var reg2 = /Bscript/; console.log(str1.match(reg1)); // null console.log(str1.match(reg2)); // ["script"] console.log(str2.match(reg1)); // ["script"] console.log(str2.match(reg2)); // null七.修飾符
1.正則表達式的修飾符,用以說明高級匹配模式的規則.
"i"用以說明模式匹配是不區分大小寫的
"g"說明模式匹配應該是全局的,也就是說,應該找出被檢索字符串中所有的匹配
// 修飾符 var str = "AAaa"; var reg = /a/; console.log(str.match(reg)); // ["a"] var reg = /a/g; console.log(str.match(reg)); // ["a","a"] var reg = /a/i; console.log(str.match(reg)); // ["A"] var reg = /a/gi; console.log(str.match(reg)); // ["A", "A", "a", "a"]用于模式匹配的String方法
String對象的一些用以執行正則表達式模式匹配和檢索替換操作的方法
String.search1.search(),他的參數是一個正則表達式,返回一個與之匹配的字串的起始位置,如果找不到匹配的字串,它將返回-1.
var str = "javascript123"; var reg = /script/i; console.log(str.search(reg)); // 4String.replace
1.replace()方法用以執行檢索與替換操作,其中一個參數是一個正則表達式,第二個參數是要進行替換的字符串.
如果正則表達式中設置了修飾符g,那么源字符串中所有模式匹配的字串都將替換成第二個參數指定的字符串,
如果不帶修飾符g,則只替換所匹配的第一個字串.
2.正則表達式中使用圓括號括起來的子表達式是帶有從左到右的索引編號的,而且正則表達式會記憶與每個子表達式匹配的文本.
如果在替換字符串中出現了$加數字,那么replace()將用與指定的子表達式相匹配的文本來替換這兩個字符.
3.replace()方法還有一些其他重要特性,第二個參數可以是函數,該函數能夠動態的計算替換字符串.
var reg = /j(ava)sc(ri)pt/g; console.log(str.replace(reg, "$1")); // "ava" console.log(str.replace(reg, "$2")); // "ri" console.log(str); // "javscript",原字符串保持不變,字符串永遠不會變化,除非另外賦值. var str2 = str.replace(reg, (a, b, c, d, e) => { console.log(a); // "javascript" 匹配字符串 console.log(b); // "ava" $1 console.log(c); // "ri" $2 console.log(d); // 0 匹配位置 console.log(e); return 1; // 匹配結果 }); console.log(str2); // 1String.match
1.match()方法是最常用的String正則表達式方法.它的唯一參數就是一個正則表達式,返回的是一個由匹配結果組成的數組.
如果該正則表達式設置了修飾符g,則該方法返回的數組包含字符串中的所有匹配結果.
// match var str = "javascriptjava"; var reg = /java/; console.log(str.match(reg)); // ["java", 0] var text = "Visit my blog at http://www.example.com/~david"; var url = /(w+)://([w.]+)/(S*)/; var result = text.match(url); console.log(result); console.log(result.length); // 4 for (var i = 0; i < result.length; i++) { console.log(result[i]); // "http://www.example.com/~david",http,"www.example.com","~david" }String.split
split()用以將調用它的字符串拆分為一個子串組成的數組,使用的分隔符是split()參數.
split()方法的參數可以是一個正則表達式,這使得split()方法異常強大.
// split var str = "abcde"; console.log(str.split("c")); // ["ab", "de"] // 可以指定分隔符,允許兩邊可以留有任意多的空白字符 var str = "1, 2,3, 4, 5"; console.log(str.split(/s*,s*/)); // [1, 2, 3, 4, 5]RegEXP對象
RegExp對象定義了兩個用于執行模式匹配操作的方法.
exec()方法與match()類似,只是RegExp方法的參數是一個字符串,而String方法的參數是一個RegExp對象.
另外一個RegExp方法是test(),它的參數是一個字符串,用test()對某個字符串進行檢測,如果包含正則表達式的一個匹配結果,則返回true.
... ?
a-zA-Z0-9 ?
0-9 ?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84407.html
摘要:正則表達式一直是里比較難以掌握的點。在中創建正則的兩種方式使用字面量這就是正則表達式的字面量語法,表示正則表達式的模式,為正則表達式的標志。字面量形式的正則表達式一般使用較多,也推薦大家盡可能使用這種形式,簡潔易讀,符合正常的使用習慣。 正則表達式一直是js里比較難以掌握的點。 看不懂,學不會,記不住。 每次需要用到正則的時候,都需要再去查找資料。 今天花時間把正則的知識點總結下,希望...
摘要:舉例一使用這個正則,打印結果為使用這個正則,打印結果為舉例二打印結果如下過濾標簽你好美麗的上海想轉化成你好,美麗的上海如果后面加,就會進入非貪婪模式。如果后面不加,就會進入貪婪模式,結果為上海。你好美麗的上海。 1.創建一個正則表達式 方法一:使用一個正則表達式字面量,其由包含在斜杠之間的模式組成。 var reg1 = /a/; var reg2 = /ab+c/; 方法二:調用Re...
摘要:舉例一使用這個正則,打印結果為使用這個正則,打印結果為舉例二打印結果如下過濾標簽你好美麗的上海想轉化成你好,美麗的上海如果后面加,就會進入非貪婪模式。如果后面不加,就會進入貪婪模式,結果為上海。你好美麗的上海。 1.創建一個正則表達式 方法一:使用一個正則表達式字面量,其由包含在斜杠之間的模式組成。 var reg1 = /a/; var reg2 = /ab+c/; 方法二:調用Re...
摘要:舉例一使用這個正則,打印結果為使用這個正則,打印結果為舉例二打印結果如下過濾標簽你好美麗的上海想轉化成你好,美麗的上海如果后面加,就會進入非貪婪模式。如果后面不加,就會進入貪婪模式,結果為上海。你好美麗的上海。 1.創建一個正則表達式 方法一:使用一個正則表達式字面量,其由包含在斜杠之間的模式組成。 var reg1 = /a/; var reg2 = /ab+c/; 方法二:調用Re...
摘要:控制權和傳動這兩個詞可能在搜一些博文或者資料的時候會遇到,這里做一個解釋先控制權是指哪一個正則子表達式可能為一個普通字符元字符或元字符序列組成在匹配字符串,那么控制權就在哪。 溫馨提示:文章很長很長,保持耐心,必要時可以跳著看,當然用來查也是不錯的。 正則啊,就像一座燈塔,當你在字符串的海洋不知所措的時候,總能給你一點思路;正則啊,就像一臺驗鈔機,在你不知道用戶提交的鈔票真假的時候,...
閱讀 2990·2021-09-10 10:50
閱讀 3193·2019-08-30 14:19
閱讀 3521·2019-08-29 17:31
閱讀 3248·2019-08-29 16:43
閱讀 2198·2019-08-29 14:05
閱讀 2095·2019-08-29 13:17
閱讀 2048·2019-08-26 13:25
閱讀 1763·2019-08-26 12:20