基本概念
按某種規(guī)則去匹配符合條件的字符串,這種規(guī)則就是正則表達(dá)
RegExp對象? //
\b 單詞邊界 g 全局匹配 i忽略大小寫 m多行匹配
構(gòu)造函數(shù)
var reg = new RegExp('\\bis\\b', 'g');
元字符 特殊含義字符? \cX? Ctrl+X
字符類 [abc]
字符類取反 [^abc]
范圍類 數(shù)字[0-9-] 字母[a-zA-Z]? //匹配橫線在最后加一個-
預(yù)定義類 \d = [0-9] \D = [^0-9] \s =? 空白符[\t\n\x0B\f\r]? \w = [a-zA-Z_0-9]單詞字符(字母數(shù)字下劃線)? //注:大寫為取反
量詞 ?0/1? +1/n? *0/n? {n}n? {n,m}n-m? {n,}n++? {0,n}最多n
貪婪模式? ? '12345678'.replace(/\d{3,6}/g,'X') 盡量多的匹配 結(jié)果X78
非貪婪模式(量詞后加?)? '12345678'.replace(/\d{3,6}?/g,'X') 盡量少的匹配 結(jié)果XX78
分組 (zxc){3}
或 |? byr(on|ca)sper? 結(jié)果 byronsper? byrcasper 都可以匹配法到
反向引用 2015-12-25 ==> 12/25/2015? '2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1')
忽略分組? 前面加?:? (?:Byron).(ok)? ok為$1
正則表達(dá)式從文本頭部像尾部開始解析件舵,文本尾部為前骚秦。
前瞻 向前檢查是否符合斷言 符合正向匹配
后顧 向后檢查(js不支持)
正想前瞻:exp(?=assert)? \w(?=\d)? 單詞字符后面是數(shù)字 匹配該單詞
負(fù)向前瞻:exp(?!assert)? \w(!=\d)? 相反
對象屬性: global ignoreCase multiline 默認(rèn)false
lastIndex:下一次搜索的開始位置
score:正則表達(dá)式的文本對象
函數(shù)(test&exec)
RegExp.protatype.test(str)? 測試有無匹配結(jié)果 true false;
例子:var reg = /\w/;? reg.test('a'); return true; teg.test('$'); return false;
RegExp.protatype.exec(str).index(匹配文本的第一個字符).toString()(文本扳抽,組內(nèi)容絮吵,第二個組內(nèi)容,···);
var reg = /\d(\w)\d/g;
var ts = '$1a2b3c4d';
while(ret = reg.exec(ts)){
console.log(ret);
} //[1a2,a]\n[3c4,c]
字符串對象方法
String.protatype.search(reg)? 檢索字符串中指定子字符串或正則表達(dá)式相匹配的子字符串,返回第一個匹配結(jié)果 查不到返回-1 不執(zhí)行全局(忽略g)且每次從第一個字符開始
(數(shù)字(會嘗試轉(zhuǎn)成正則)结执,字符串,正則表達(dá)式都可以)
String.protatype.match(reg)? 找到一個或多個與regexp匹配的文本 g很重要
//注:非全局與exec 相同? string和 reg掉了個個兒捧书。
全局只返回字符串?dāng)?shù)組? 不返回分組信息? 沒有index眯杏,lastIndex屬性
ts.match(reg);//
String.protatype.split(reg)
'a,b,c,d'.split(',')//(/,/) =>? ["a","b","c","d"]
'a1b2c3d4e'.split(/\d/g) => ["a","b","c","d","e"]
String.protatype.replace(reg,funtion(match,group1,group2,index,origin){
return group1+group3;
});//group2會消失
// match 匹配到的字符串
// group 分組(沒有的話不寫)
// index 匹配的第一個字符位置
// origin 原字符串