近日在學習正則表達式 今天作初步總結 不足之處 歡迎指出javascript
正則的功能:匹配字符串;可結合String函數處理字符串。css
經常使用函數:str.match(Exp)、Exp.text(str),此外還有str.replace(Exp,replaceStr)
區別:語法結構相反;match返回匹配的字符串, text返回布爾值html
正則的兩種寫法:/Exp/、new RegExp("Exp")
區別:/Exp/書寫方便,但只能匹配常量,沒法解析變量 ;new RegExp("Exp")可解析變量java
語法(經常使用): 標識符:g(全局匹配)、i(不區分大小寫)、m(多行匹配),可同時使用,例如:/Exp/gi、new RegExp("Exp","g");正則表達式
量詞:{3,6}表示3-6個,例如/\w{3,6}/表示3-6個字符bash
等同於{1,}表示至少有一個或者無限多個 等同於{0,}表示0個或多個,無關緊要 ?等同於{0,1}表示0個或一個 {3}表示3個 元字符:(大小寫匹配正好相反,例如\d匹配數字 \D匹配非數字) . 匹配單個字符 \d 匹配數字 \w 匹配字符 \s 匹配空格 \b 匹配獨立部分,例如單詞邊界 holle worldhello 正則:/\bhello\b/g匹配到第一個函數
字符集:[a-z] [a-z] 匹配小寫字母 [A-Z] 匹配大寫字母 [0-9] 匹配數字 [0-9a-zA-Z]三者爲邏輯或關係,可匹配小寫字母或大寫字母或大寫數字學習
開始與結束: ^ 表示開始 $ 表示結束測試
邏輯:ab(與)、a|b(或)、[^0-9](非) [^0-9] 在字符集中的^表示邏輯非,這裏表示非數字
ab 表示邏輯與,例如/ab/匹配連着的ab
a|b 表示邏輯或 ,能夠符合a邏輯或者b邏輯,例如/^\d+/g匹配整串數字或小寫字母ui
子集:()裏面是一個集合
例如:原來/abc+/能夠匹配到abcccc,可是/(abc)+/匹配到的是abcabcabc
子集特殊語法:引自(www.cnblogs.com/deerchao/ar…
正則小練習:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<style type="text/css">
html,body{
font-family: "微軟雅黑";
font-size:16px;
line-height: 30px;
}
.red{
color: red;
}
.p{
padding-left:50px;
}
</style>
</head>
<body>
</body>
<script type="text/javascript">
var mailstr="lory_1234gggg56@qq163.com.com";
var qqstr="57729945024";
//var phonestr="15635395946";
var phonestr2="010-3535946";
var idstr="13050219951128494X";
var mmstr="Zaaaaaaaaaa1a";
var or="aaaaaaaaaaaa";
var cc="alilili"
var reg=
{
mail:/^[0-9a-zA-Z_]+@[0-9a-zA-Z]+(\.[a-z]+){1,2}$/g,//可包含大小寫字母,並有@符號,包含.符號
qq:/^\d{5,12}$/g,//5-12位數字
phone:/^(0[0-9]{2}[\d-]{1})?\d{7}$|^\d{11}$/g,//規則一:第一位爲0,二三位爲數字,第四位爲數字或-,後跟7位數字;規則2:座機去除前4位(例如010-);規則二:11位數字
idcard:/^\d{17}[0-9x]$/gi,//18位數字,最後一位可爲X,不區分大小寫
mm:/^(?![0-9a-z]+$)(?![0-9A-Z]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{6,18}$/g,//匹配非全數字 非全字母 密碼必須由大寫字母、小寫字母、數字組合成,長度爲6-18位
or:/^\d+$|^[a-z]+$/g,
cc:/a(li)+/g
}
var des={
mail:"郵箱:可包含大小寫字母,並有@符號,包含.符號",
qq:"qq:5-12位數字",
phone:"電話號碼:規則一:第一位爲0,二三位爲數字,第四位爲數字或-,後跟7位數字;規則2:座機去除前4位(例如010-);規則二:11位數字" ,
idcard:"身份證號碼:18位數字,最後一位可爲X,不區分大小寫",
mm:"密碼:匹配非全數字 非全字母 密碼必須由大寫字母、小寫字母、數字組合成,長度爲6-18位",
or:"邏輯或測試",
cc:"子集測試"
}
fn.call(mailstr,"mail");
fn.call(qqstr,"qq");
//fn.call(phonestr,"phone");
fn.call(phonestr2,"phone");
fn.call(idstr,"idcard");
fn.call(mmstr,"mm");
fn.call(or,"or");
fn.call(cc,"cc");
function fn(c)
{
document.write("正則:<span class='red'>"+reg[c]+"</span><br/><span class='p'>"+des[c]+"</span><span class='p'>匹配字符:"+this.match(reg[c])+"</span><br/>");
}
</script>
</html>
複製代碼
修改如下正則:
/[EMOT](1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|800|801|802|803|zyg)[\/EMOT]/g
複製代碼
需求:匹配[EMOT]1-80數字或800-803數字或zyg[/EMOT]
var reg=/\[EMOT\]([1-7]{1,2}|[1-8]0|78|79|80[0-3]|zyg)\[\/EMOT\]/g;
var str="[EMOT]22[/EMOT][EMOT]78[/EMOT][EMOT]80[/EMOT][EMOT]00[/EMOT][EMOT]10[/EMOT][EMOT]800[/EMOT][EMOT]803[/EMOT][EMOT]804[/EMOT][EMOT]zyg[/EMOT][EMOT]z[/EMOT]";
var reg2=/\[EMOT\](1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|800|801|802|803|zyg)\[\/EMOT\]/g;
console.log(str.match(reg));
console.log(str.match(reg2));
複製代碼
//去除html標籤
var str="<p>免費、即時的多語種在線翻譯</p>↵↵<p>只要您到店,即可以給您一個滿意的價格。</p><div>45555555555555</div>"
var reg=/<\/?[a-z]+>/g;
console.log(str.replace(reg,""));
複製代碼
正則是單個字符進行匹配的!
路漫漫其修遠兮,吾將上下而求索