我就翻書看到講正則表達式的,,以前一直聽說過,感覺很難也沒去看,今天看到許多地方ajax驗證一堆都提到,,就淺顯的看看,了解的也不深,就知道基本的幾個,在這里記錄一下,以后再深入了解
先說一下用途
說白了就是查找驗證匹配替換定位一堆對字符串的處理方式
怎么使
var a=new RegExp(‘s+’);
var a=/s+/;
s+就是一個最簡單的正則表達式
就是搜索一個或多個字母“s”
就和string number一樣regexp也是js的對象
所以也有方法可以調用
test()檢測是否有匹配的字符串
exec()執行 以一個數組的形式返回第一個匹配的
var re =/js/;
var str="jsjsjsjsjs";
if(re.test(str)){
document.write("有");
}
有個需要注意的就是正則表達式區分大小寫
所以你如果想不區分大小寫可以這樣
var re=/javascript/i;//就是在/后面加個i
var re=new RegExp("javascript","i")
除了i 還有g(全局匹配),m(多行匹配)^(一行開始)&(一行結束)
時間緊我就不把js全部代碼全血出來了
舉幾個簡單例子
還是寫一下吧
function(){
var re=new RegExp('js*','ig');
//匹配一個j與多個s組合 全局不區分大小
var str="djsklasjs jsss jsiiii";
var resultarray=re.exec(str);
while(resultarray){
//while用來判斷正則表達式是否執行完成 完成返回一個空
document.write(resultarray[0]);
//顯示匹配的部分
document.write(re.lastIndex+"
")
//正則表達式中lastIndex指向匹配對象的位置
}
結果
js 1
js 7
jsss 10
js 15
var re=/(ds)+(j+s)/ig
//匹配一個以上的ds(不能分開)同時緊鄰一個以上j和一個s
//dsdsjs可以
//dsdsdsjjs可以
//js不可以因為(ds)后面是“+”如果是“*”就可以為零個ds //js這種情況就可以匹配
###正則表達式的轉義字符
就是反斜杠\\\\\\
\+
\*
\s 表示空格,,,,,常用
>var re=/\s\*/g;
var str="wo *shi *guozhipeng";
var resultstring=str.replace(re,-);
alert(resultstring);
就會變成wo-shi-guozhipeng
這里我在說一下就是 + * ? . 這幾個符號
+表示匹配一個以上
*表示0個以上
?表示0或1次
. 表示就一次同時 "."可以用來表示所有的字符
var str=""guozhipeng"hehehehehhehehe";
如果用(.*)匹配就是整個字符串"guozhipeng"hehehehehhehehe
用(.*?)就會變成“guozhipeng”因為?匹配表示0或1,而我的雙引號已經出現兩次了,,,所以就輸出“guizhipeng”
在說幾個我看到的幾個常用的正則表達式
\d 一個或多個數字等同于[0~9]
\D 一個或多個非數字=======等同于[^0~9]
這里“^”表示反
[A~Za~z]所有字母
/^the/這里的^表示開頭 使用這個就表示用the開頭的字符串
/end$/這里的$表示結尾 表示以end看、結尾的字符串
使用var str=“heheheh end”匹配
var str=“heheh end hehe”不匹配
然后正則表達式中()小括號的使用也很常見,,,使用()后()內的內容會被保存到數組里
str=“the is fun 0 ni”
在/(^\D*)[0~9]/ 匹配后會出現兩個記錄
一個是the is fun 0
還有一個就是小括號里的the is fun
同時$1這時就指代小括號里匹配的第一個元素 如果有其他的匹配項會一次定義為$1 $2 $3
(美元符號顯示不出來1,2,3前面有一個¥類似的美元符號)
a|b|c 還是或的意思
s{2}就表示兩個s字母