<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>正規表達式</title>
<script type="text/javascript">
/*------正規表達式本身就是一種語言,在程式設計語言裡是通用的.
*一 概念:
正規表達式(regular expression)描述了一種字元串比對的'模式',可以用來檢查一個串是否含有某種子串,将比對的子串做‘替換’或者從某個串中取出符合‘某個條件’的子串等。
str.indexOf('abc'); 精确比對------》隻能查找初abc
正規表達式 : 模糊比對
《類似》
select*from 表 where name="張三"; //精确比對 找出張三所屬的資訊。
select*from 表 where name like '張%'; //模糊比對 找出以張開頭的所屬資訊。
二:正則對象
要使用正規表達式,必須要在程式中建立正則對象
1:如何建立正則對象(需要得到一個RegExp類的執行個體)
第一種:隐式建立(好了解)
var 對象 = /比對模式/比對标志;
第二種:顯示建立
var 對象 = new RegExp(比對模式,比對标志);
兩種方法的差別:
var reg=/\d/gi;
如果使用直接執行個體化,那麼像'\d'這樣的字元,需要轉義'\\d';
var reg=new RegExp('\\d','gi');
《《如何使用這個對象?????
var arr="Hello World";
var reg=new RegExp('/e/','gi');
console.log(typeof(reg));
console.log(reg.constructor);
2:比對标志:
g:全局比對
i:忽略大小寫
三:使用正則對象
在js中,使用正則對象主要有兩種用法:
1:RegExp類
test(str): 比對指定的模式是否出現在字元串中.
exec(str): 傳回比對模式的字元串.
2:String類
search :比對符合比對模式的字元串出現的位置.
match :傳回比對模式的字元串(以數組形式),沒有比對到則為null.
replace :使用指定的内容替換比對模式的字元串
str.replace(reg,'content');
reg:正則對象
content:替換的内容
split:使用比對模式的字元串做為分割符,對字元進行分割,傳回數組.
不同情況下使用不同的方法:
如:
郵箱格式,手機格式,IP格式合不合法,用text。
抓取網頁中所有的手機号,使用exec或match。
替換掉網頁中敏感詞彙,用replace。
四:幾個重要的概念
子表達式:在正則比對模式中,使用一對括号包裹起來的内容是一個子表達式.
捕獲:在正則比對模式中,子表達式比對到的内容會被系統捕獲至系統的緩沖區中。
反向引用:捕獲之後,可以在比對模式中,使用\n(n:數字)來引用系統的第n号緩沖區的内容。
例子:
比對3個數字前面的字元和後面的字元相同。
var str = 'kkkkjava123javabasafjavascript456javascriptafafpha789php';
var reg = /(\w+)\d\d\d\1/gi;
var result = str.match(reg);
alert(result);
查找連續的四個數字
var str = 'asfsafsafsa1234afasfsaf5668afsafsaf78';
var reg = /\d\d\d\d/gi;
var result=str.match(reg);
//查找四個連續相同的數字
var str='1111asadsad5555114228';
var reg= /(\d)\1\1\1/gi;
//查找數字 1221 3443
var str='122155444443443666554557';
var reg= /(\d)(\d)\2\1/gi;
//查找四個連續相同的數字或者字元
var str='aaaa1111afsAAsafasAAafas5555';
var reg= /(\w)\1\1\1/gi;
//比對字元 AABB
var str='AABBCCDDasfsafaabb';
var reg= /([A-Z])\1([A-Z])\2/gi;
一般情況下,後面的内容要求與前面的一緻,就會用到子表達式,捕獲,反向引用。
var str = 'adad<div>商品</div>asdsa<span>sasad</span>fff<p></p>';
//特殊符号需要轉義 /----->\/ .------>除了/n之外的任意字元
var reg =/<(\w+)>.*<\/\1>/gi;
var result =str.match(reg);
五.正則文法細節
正規表達式是由普通字元(例如字元a到z)以及特殊字元(稱為元字元)組成的文字模式。正規表達式作為一個模闆,将某個字元模式與所搜尋的字元進行比對.
1):普通字元:a,b,1,2...
2): 特效字元(元字元):\d\D\w...
在寫正規表達式之前,我們需要确定這樣幾件事。
1)要‘查’什麼.
2) 要‘從那開始’查.
3) 要查‘多少’.
---1:限定符
限定符可以指定正規表達式的一個給定元件必須要出現多少次才能滿足比對。
* 比對前面的子表達式零次或多次. {0,}
+ 比對前面的子表達式一次或多次. {1,}
? 比對前面的子表達式零次或一次. {0,1}
{n} 比對确定的n次
{n,} 至少比對n次
{n,m} 最少比對n次且最多比對m次
注意:既可以比對到n個,又可以比對到m個時,正規表達式會自動比對到多的那一種,這在正則中叫做貪婪比對原則。
var str ="sasadsa123456789";
var reg =/\d{3,5}/gi;
但如果在表達式的後面使用'?',表示非貪婪比對原則,就會盡可能比對少的。
var str ="sasadsa123456789";
var reg =/\d{3,5}?/gi;
---2元字元---》(字元比對符)
字元比對符用于比對某個或某些字元
字元簇:
[a-z]:表示a-z之間的任意一個字元
[A-Z]:表示A-Z之間的任意一個字元
[0-9]:表示0-9之間的任意一個數字
[0-9a-z]:。。。
[0-9a-zA-Z]:。。
[abcd]:。。
[^a-z]:取反,表示除了a-z之間任意一個字元
[^0-9]:。。。
[^abcd]:。。。
\d:比對一個數字字元 [0-9]
\D:比對一非數字字元 [^0-9]
\w:比對包括下劃線,大小寫字母,數字。[a-zA-Z0-9]
\W:比對任何非下劃線,大小寫字母,數字[^a-zA-Z0-9]
\s:比對任何空白字元.
\S:比對任何非空白字元.
.:比對初'\n'之外的任何單個字元.[^\n]
----3:元字元-----》(定位符)【重要】
可以将一個正規表達式固定在一行的開始或結束。也可以建立隻在單詞内或隻在單詞開始或結尾出現的正規表達式.
^ :比對輸入字元串的‘開始位置’.
$ :比對輸入字元串的‘結束位置’.
\b :比對一個單詞邊界
\B :比對非單詞邊界
var str ='hello javascript java php mysql';
var reg =/^hello/gi;
alert(result); //比對到了-----》hello
var str ='javascript java php mysql hello';
alert(result); //沒有比對到-----》null
----4:元字元------》(轉義符)
\:用于比對某些特殊字元
----5:元字元------》(選擇比對符)
|:可以比對對個規則
----6:關于正規表達式的幾種特殊用法
1):(?=) 正向預查
var str ='hello,javassshello,javascriptffffhello,php';
//隻想比對後面為,javascript的hello
var reg =/hello(?=,javascript)/gi;
2):(?!) 反向預查
//比對除了後面為,javascript的hello
var reg =/hello(?!,javascript)/gi;
3):(?:) 比對内容,但結果不會捕獲
//()---->在正則中是子表達式的意思,會被捕獲。
var reg =/hello(?:,javascript|,php)/gi;
while(result =reg.exec(str)){
}
六:正則學習工具:頁面執行個體
*/
</script>
function $(id){
return document.getElementById(id);
var result ='';
window.onload =function(){
var contentObj =$('content');
var regObj =$('reg');
var resultObj =$('result');
$('test').onclick =function(){
var str=contentObj.value;
var regt=regObj.value;
var reg=eval('/'+regt+'/gi');
if(reg==undefined){
resultObj.value='你輸入的正則條件不合法!';
return;
}
var result =reg.test(str);
resultObj.value=result;
$('exec').onclick =function(){
var arr=[];
arr.push(result);
resultObj.value=arr;
$('search').onclick =function(){
var result = str.search(reg);
$('match').onclick =function(){
$('replace').onclick =function(){
var result = str.replace(reg,'*');
$('split').onclick =function(){
var result = str.split(reg);
</head>
<body>
内容: <input type="text" id="content" size=60/><br><br>
正則: <input type="text" id="reg"/ size=60><br><br>
結果: <textarea id="result" cols='50' rows='10'></textarea><br><br>
<input type="button" id="test" value="test"/>
<input type="button" id="exec" value="exec"/>
<input type="button" id="search" value="search"/>
<input type="button" id="match" value="match"/>
<input type="button" id="replace" value="replace"/>
<input type="button" id="split" value="split"/>
</body>
</html>
<code><</code><code>br</code><code>></code>
<code></code>
本文轉自 沉迷學習中 51CTO部落格,原文連結:http://blog.51cto.com/12907581/1927805,如需轉載請自行聯系原作者