摘要:正則表達式對象通過內置對象支持正則表達式。做法很簡單,就是在量詞后添加一個即可分組分組或分組取值前瞻正則表達式是從文本頭部向尾部解析。
正則表達式 REGEXP對象
javascript通過內置對象Regexp支持正則表達式。
兩種方法來創建Regexp對象。
1、字面量
var reg = /d{4}/g; // g 表示進行全局替換
2、構造函數
var reg = new RegExp("d{4}","g"); // 這里因為是字符串,需要對特殊字符進行轉義
// 利用正則進行文本替換 var reg = new RegExp("is","g"); "what is this?".replace(reg, "IS"); // "what IS this?"修飾符
g : global 全文搜索,如果不添加的話,搜索到第一個就匹配停止
i : ignore case 忽略大小寫,默認大小寫敏感
m : multiple lines 多行搜索
"He is a boy. Is he?".replace(/is/g, "0"); // "He 0 a boy. Is he?" "He is a boy. Is he?".replace(/is/gi, "0"); // "He 0 a boy. 0 he?"元字符
正則表達式中有著兩種基本字符,原義文本字符 和 元字符;
原義文本字符: a b f r ...
元字符: 指有特殊含義的非字母字符 b t ...
正則表達式中的特殊字符: * + ? $ ^ . | [] {} ()
字符類我們可以使用 元字符 [] 來構造一個簡單的類
所謂類,就是符合某一個特征的對象,是泛指。
[abc]把a b c 歸為一類,表達式可以匹配這類字符
使用 ^可以取反,創建反向類,表示匹配不符合的字符
"a1b3c342bb".replace(/[abc]/g, "X"); // "X1X3X342XX" "a1b3c342bb".replace(/[^abc]/g, "X"); // "aXbXcXXXbb"范圍類
使用 [a-z]來鏈接兩個字符表示從 a到 z的任意字符;
[a-zA-Z0-9]
預定義類和邊界預定義類
* . [^ ] 除了回車換行之外的任意字符 * d [0-9] 數字 * D [^0-9] 非數字 * s [ f x0B] 空白符 * S [^ f x0B] 非空白符 * w [0-9a-zA-Z_] 字母數字下劃線 * W [^0-9a-zA-Z_] 非字母數字下劃線
邊界
^ 開頭
$ 結尾
b 單詞邊界
B 非單詞邊界
"@abc@ab@".replace(/@./g, "Q"); // "QbcQb@" "@abc@ab@".replace(/^@./g, "Q"); // "Qbc@ab@" "@abc@ab@".replace(/.@$/g, "Q"); // "@abc@aQ"
// 驗證 m 表示多行搜索 var mulSrt="@123 @456 %890"; mulSrt.replace(/@d/gm, "X"); "X23 X56 %890"量詞
* ? 出現0次或者一次 0/1 * + 至少出現1次 >= 1 * * 出現零次或者一次 >= 0 * {n} 出現n次 * {n, m} 出現 n 到 m 次 * {n, } 至少出現n 次貪婪模式和非貪婪模式
/d{3,6}/ 匹配 12345678 得到 123456 // 這就是貪婪模式
非貪婪模式
讓正則表達式盡可能的少匹配,也就是說一旦匹配成功就不在繼續嘗試。[做法很簡單,就是在量詞后添加一個?即可]
/d{3,5}?/g分組
()分組
"a1b2c3d4".replace(/[a-z]d{3}/g, "X"); // a1b2c3d4 "a1b2c3d4".replace(/([a-z]d){3}/g, "X"); // Xd4
或 |
"meiaals".replace(/[a-z]+(aa|bb)[a-z]+/g, "0"); // 0 "meibbls".replace(/[a-z]+(aa|bb)[a-z]+/g, "0"); // 0
分組取值
"2016-04-23".replace(/(d{4})-(d{2})-(d{2})/, "$3-$2-$1"); // "23-04-2016"前瞻
“正則表達式是從文本頭部向尾部解析”。這就像在走路,沒走過的路在你的前面,需要你往前看(前瞻);走過的路需要你回頭看(后顧)
[js不支持后顧]
正向前瞻exp(?=assert)
負向前瞻exp(?!assert)
"a2*3".replace(/w(?=d)/g, "X"); // "X2*3"對象屬性
global:是否全文搜索,默認false
ignore case:是否大小寫敏感,默認是false
multiline:多行搜索,默認值是false
lastIndex:當前表達式匹配內容的最后一個字符的下一個位置
source:正則表達式的文本字符串
let regex = /(d{4}1)-(d{2})-(d{2})/g; regex.source // "(d{4}1)-(d{2})-(d{2})"RegExp對象本身的方法
RegExp.prototype.test(str)
用戶測試某一個字符串是否存在匹配正則表達式模式的字符串,如果存在就返回true 、 否則 返回 false。
var reg2=/w/g; 進行reg2.test("ab")時,第三次會變成false 原因: while(reg2.test("ab")){ console.log(reg2.lastIndex); }
RegExp.prototype.exec(str)
如果沒有匹配返回null,如果匹配成功,返回一個數組。(index: 匹配文本的第一個字符的位置,input: 存放被檢索的字符串的string);
var reg = /d(w)(w)d/g; var str = "$1ab343sdd5ef6"; var ret; while(ret = reg.exec(str)) { console.log(ret[0] +"-"+ret[1] +"-"+ret[2]); console.log(ret.index); } // ["1ab3", "a", "b", index: 1, input: "$1ab343sdd5ef6", groups: undefined] // ["5ef6", "e", "f", index: 10, input: "$1ab343sdd5ef6", groups: undefined] // 第一個為匹配的字符串, 第二項之后都是分組內容String對象本身的方法
String.prototype.search(reg)
用于檢索字符串中指定的子字符串、或者檢索于正則匹配的子字符串。返回一個index, 如果沒有找到返回-1. [忽略g,并且每次都是從開頭匹配];
"wwasdasf7".search(/d/); // 8
String.prototype.match(reg)
match方法將檢索字符串,以找到一個或者多個與regexp匹配的文本。
(是否有g影響很大)
如果找到了就返回一個數組,如果沒有找到,返回null
var reg = /d(w)(w)d/g; var str = "$1ab343sdd5ef6"; var ret = str.match(reg); console.log(ret); // ["1ab3", "5ef6"]
String.prototype.split(str/reg)
"a,d,f,g,h".split(","); // ["a", "d", "f", "g", "h"] "a1b1c2d3f5".split(/d/g); // ["a", "b", "c", "d", "f", ""]
String.prototype.replace(str, replacestr)
"asd231".replace("2", "S");
String.prototype.replace(reg, replacestr)
"asd231".replace(/d+/g, "S");
String.prototype.replace(reg, function)
// a1b2c3d4 => z2b3c4d5 "a1b2c3d4".replace(/d/g, function(match, index, origin){ console.log(index); return parseInt(match) + 1; }) // "a2b3c4d5"
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96573.html
摘要:選擇分組和引用正則表達式的語法還包括指定選擇項子表達式分組和引用前一子表達式的特殊字符。帶圓括號的表達式的另一個用途是允許在同一正則表達式的后部引用前面的子表達式。 正則表達式(regular expression)是一個描述字符模式的對象。JavaScript的 RegExp類 表示正則表達式,String和RegExp都定義了方法,后者使用正則表達式進 行強大的模式匹配和文本檢索與...
摘要:如果遇到非常的復雜的匹配,正則表達式的優勢就更加明顯了。關于正則表達式書寫規則,可查看,上面說的很清楚了,我就不貼出來了。替換與正則表達式匹配的子串,并返回替換后的字符串。結語正則表達式并不難,懂了其中的套路之后,一切都變得簡單了。 前言 在正文開始前,先說說正則表達式是什么,為什么要用正則表達式?正則表達式在我個人看來就是一個瀏覽器可以識別的規則,有了這個規則,瀏覽器就可以幫我們判斷...
摘要:正則表達式的意義中的正則表達式使用表示,可以使用構造函數來創建對象,不過對象更多的是通過一種特殊的直接量語法來創建。用構造函數也可以定義一個與之等價的正則表達式,代碼如下正則表達式的模式規則是由一個字符序列組成的。 正則表達式的模式匹配 正則表達式(regular expression)是一個描述字符模式的對象。javascript的RegExp對象表示正則表達式,String和Reg...
Javascript的正則表達式是前端中比較重要的部分,正則表達式主要用于字符串處理,表單驗證等場合,實用高效,文章主要對JavaScript中的正則的學習與總結 正則表達式的定義 正則表達式:是一個描述字符模式的對象,JavaScrip中正則表達式用RegExp對象表示,可以使用RegExp構造函數來創建正則對象 正則表達式的創建 1.字面量創建 var reg = /[a-z]/; 2.構...
摘要:返回是一個只讀的布爾值,看這個正則表達式是否帶有修飾符。方法,它的參數是一個字符串,用對某個字符串進行檢測,如果包含正則表達式的一個匹配結果,則返回,否則返回。總結這次主要是說說,中正則表達式對象的個屬性,而最需要注意的就是屬性了。 說明 這篇文章,主要和大家聊聊JavaScript中RegExp對象的屬性。 解釋 每個RegExp對象都包含5個屬性,source、global、ign...
閱讀 2592·2023-04-25 22:09
閱讀 2837·2021-10-14 09:47
閱讀 1889·2021-10-11 11:10
閱讀 2677·2021-10-09 09:44
閱讀 3372·2021-09-22 14:57
閱讀 2493·2019-08-30 15:56
閱讀 1615·2019-08-30 15:55
閱讀 775·2019-08-30 14:13