標籤:
定義:正則用於規定在文本中檢索的內容,它是對字串執行模式比對的強大工具
RegExp(Regex) 對象的文法: new RegExp(pattern, attributes);
pattern為一個字串或匹配規則
attributes為可選字串,包含屬性g、i 和 m
g:代表全域匹配 (繼續往下匹配)
i:代表不區分大小寫匹配
m:代表多行匹配,只對^和$模式有用
定義Regex有兩種形式:
建構函式方式: new RegExp(pattern, attributes); 例:var reg=new RegExp(“abc","g"); 建構函式中的正則可以是常量字串或一個js變數
普通方式:/pattern/attributes(/正則/屬性) 例:var reg=/abc/g; 普通方式中的正則必須是一個常量字串
每個Regex都有一個 lastIndex 屬性,用於記錄上一次匹配結束的位置(索引值)。
擷取 reg.lastIndex 設定 reg.lastIndex=0;
樣本: var str=‘abcdeabfg’;
var reg=new RegExp(‘ab’,‘g’);
alert(reg.test(str));
alert(reg.lastIndex);//2
元字元:
\d : 匹配任意一個數字,0~9 中的任意一個
\s : 匹配任意一個空白字元
\b : 匹配一個單詞邊界,不匹配任何字元
\w : 匹配任意一個字元( 字母、 數字、底線 ) . : 匹配任意一個字元,除了分行符號( \n )
\n : 尋找分行符號
\u : 通常用來匹配漢字
運算式 "\d","\s","\b","\w",對應的大寫字母表示相反的意義 如:\D 匹配所有的非數字字元
方括弧:
[abc] : 尋找方括弧之間的任何字元。
[^abc] : 尋找任何不在方括弧之間的字元。
[0-9] : 尋找任何從 0 至 9 的數字。
[a-z] : 尋找任何從小寫 a 到小寫 z 的字元。
[A-Z] : 尋找任何從大寫 A 到大寫 Z的字元。
量詞:
n+ : 匹配任何包含至少一個 n 的字串。
n? : 匹配任何包含零個或一個 n 的字串。
n* : 匹配任何包含零個或多個 n 的字串。
n{X} : 匹配包含 X 個 n 的序列的字串。
n{X,Y} : 匹配包含 X 到Y 個 n 的序列的字串。
^n : 匹配任何開頭為 n 的字串。
n$ : 匹配任何結尾為 n 的字串。
其他:
| : 匹配左邊或者右邊
\ : 轉義符 特殊標點符號,在前面加 \ 後,就代表該符號本身
^ 要匹配 "^" 字元本身,請使用 \^
( ) 要匹配小括弧本身,請使用 \( 和 \)其他特殊標點符號 [ ] { } . ? + * |
Unicode編碼16進位的utf-8漢字編碼: 4e00最小中文字元 9fa5最大中文字元
/^[\u4e00-\u9fa5]+$/ //常用漢字編碼範圍
RegExp 對象的方法
test:檢索字串中指定的值 返回 true 或 false reg.test(str);
exec: 檢索字串返回尋找結果的第一個值 reg.exec(str);
compile: 該方法可以重編輯指定的Regex var reg=new RegExp("13[4-9](\\d){8}","g");
//重新編輯Regex reg.compile("13[0-3](\\d){8}","g");
String 對象方法
search:檢索與Regex相匹配的值 用法:str.search(reg); (返回索引值,無-1)
match:返回所有Regex的匹配(加g) 用法:str.match(reg); (返回數組)
replace:替換與Regex匹配的子串 用法:str.replace(reg,"");
split:將字串匹配的部分做分割(去除) 用法:str.split(reg); (返回數組)
<!doctype html><html><head><meta charset="utf-8"><title>標題</title><meta name="keywords" content=""><meta name="description" content=""><style> *{margin:0; padding:0; list-style:none;} </style></head><body> <input id="ipt" type="text" name="" value=""> <button id="btn">驗證</button><script> // var str1=‘abc12Abc34abc56aBc78‘; // var reg=new RegExp(‘Abc‘,‘g‘); // console.log(reg.test(str1)); // console.log(reg.lastIndex);//3 // reg.lastIndex=11;//設定下次匹配的開始位置 // console.log(reg.test(str1)); // console.log(reg.exec(str1)); // console.log(str1.match(reg));//["abc", "Abc", "abc", "aBc"] // var str3=str1.replace(reg,‘***‘); // document.write(str3); // alert(‘abcdef\n123456‘); // var str2=‘abc12Abc34\nabc56aBc78‘;//使用/n // var reg2=new RegExp(‘^abc‘,‘gm‘); // console.log(str2.match(reg2));//返回數組; var ipt=document.getElementById(‘ipt‘); var btn=document.getElementById(‘btn‘); var reg1=/[0-9]{11,12}$/g;//11位到12數字; var reg2=/\s{1,}/g;//匹配1到N位空白字元; var reg3=/\bhello\b/g;//匹配單詞邊界,不匹配字元,就是匹配單詞hello; btn.onclick=function (){ /*if (reg1.test(ipt.value)) { alert(‘輸入正確‘); } else{ alert(‘輸入有誤‘); };*/ if (reg2.test(ipt.value)) { alert(‘不能含有空格‘); } else{ alert(‘輸入正確‘); }; // reg3.lastIndex=0; // if (reg3.test(ipt.value)) { // alert(‘有單詞邊界‘); // } else{ // alert(‘沒有單詞邊界‘); // }; }</script></body></html>
js入門篇之Regex基礎