1.2正則表達式
正則表達式由有普通字符和一些元字符(具有特定含義的字符)組成。
腳下留心:正則表達式是表達式,不是一門語言,既然是表達式既可以運行在客戶端也可以運行在服務器端,而且跨語言跨平臺。
正則表達式區(qū)分大小寫
1.3中括號的應用
方括號中的字符屬于普通字符
1、[0-9a-zA-Z_]:字母、數(shù)字、下劃線
2、[c-f]:c到f的任意字符
<script type="text/javascript">
var str='鋤禾日當午';
var patten=/禾/; //則表達式必須放在//之間
var info=str.match(patten);
console.log(info); // ["禾", index: 1, input: "鋤禾日當午"]
if(info!=null){
console.log(info[0]);
}
</script>
match:用來匹配字符串,沒有找到匹配返回null,找到匹配返回一個數(shù)組
注意:正則表達式必須放在/ 正則表達式 /之間
<script type="text/javascript">
var str='Hello';
var array=str.match(/[d-n]/);
console.log(array); // ["e", index: 1, input: "Hello"]
console.log(array[0]); //e
</script>
1.4量詞
量詞用來指定字符出現(xiàn)的次數(shù)
字符 含義
- 字符出現(xiàn)的次數(shù)>=1
=0
? =0或=1
{n} 字符出現(xiàn)n次
{n,m} 字符出現(xiàn)的次數(shù)>=n并且<=m
{n,} 字符出現(xiàn)的次數(shù)>=n
<script type="text/javascript">
var stu=['tm','tom','toom','tam'];
for(var s in stu){
//console.log(stu[s].match(/to+m/)); //tom toom
//console.log(stu[s].match(/to*m/)); //tm tom toom
//console.log(stu[s].match(/to?m/)); //tm tom
//console.log(stu[s].match(/to{2,3}m/)); //toom
console.log(stu[s].match(/to{1,}m/)); //tom,toom
}
</script>
1.5元字符
字符 含義
() 作用一:將多個字符組成一組
作用二:模式單元(提取匹配數(shù)據(jù))
[] 定義字符集合
{} 定義字符重復的次數(shù)
- 字符出現(xiàn)的次數(shù)>=1
=0
? =0或=1
^ 表示匹配開始
$ 表示結(jié)束
. 代表任意字符
\ 轉(zhuǎn)義字符
| 或者
例題:小括號,將小括號中字符串作為一個整體
<script type="text/javascript">
var str='aabbb';
var info=str.match(/(ab)+/);
console.log(info[0]);
</script>
例題:^和$
<script type="text/javascript">
var str='abcde';
//var info=str.match(/^bc/); //必須是b開頭
//var info=str.match(/de$/); //必須的e結(jié)尾
var info=str.match(/^a[a-z]+e$/); //以a開頭,e結(jié)尾
console.log(info);
</script>
例題:.代表任意字符,\表示轉(zhuǎn)義
例題:或
<script type="text/javascript">
var stu=['tam','tom','tan','toe','taam','taom','toom'];
for(var s in stu){
var info=stu[s].match(/^t[a|o]+m$/);
console.log(info); //tam tom taam taom toom
}
</script>
關于元字符的練習
<script type="text/javascript">
//--------------練習一---------
var array=['apple','banana','orange','tom'];
for(var a in array){
if(array[a].match(/apple|orange/)){
console.log(array[a]); //apple、orange
}
}
//-------------練習二---------
var email=['aa','aa@aa.com','bb@bb.com.cn'];
for(var e in email){
if(email[e].match(/.+@.+\..+/)){
console.log(email[e]); //aa@aa.com bb@bb.com.cn
}
}
//------------練習三---------
var str=['ab','abab','ababab','ac'];
for(var s in str){
if(str[s].match(/(ab)+/)){
console.log(str[s]); //ab abab ababab
}
}
//----------練習四---------------
var emp=['tom','otoom','tooooomo','otooomo'];
for(var e in emp){
if(emp[e].match(/to*m/)){
console.log(emp[e]); //全部滿足
}
}
for(var e in emp){
if(emp[e].match(/^to*m$/)){
console.log(emp[e]); //tom
}
}
</script>
1.6模式修正符
i 忽略區(qū)分大小寫
g: 全局匹配
1.7模式單元
模式單元用于將匹配的數(shù)據(jù)提取出來
用于做爬蟲技術(shù)(數(shù)據(jù)采集)
<?php
//---采集誓婚網(wǎng)的數(shù)據(jù)
$str=file_get_contents('http://www.shihun1314.com');
$pattern='/<div class="home_index_part1_1 body">(.+)<\/div>/';
preg_match($pattern, $str,$info);
echo ($info[1]);
?>
1.7.1模式單元的重復匹配
模式單元的重復匹配是從1開始, \1表示第一個模式單元 \2表示第二個模式單元
<script type="text/javascript">
var str='2015-12-12 12:09:12';
//var reg=/[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/;
//var reg=/[0-9]{4}-([0-9]{2})-\1 \1:\1:\1/; //\1 表示和第一個模式單元一樣
//var reg=/[0-9]{4}(-[0-9]{2})\1 [0-9]{2}(:[0-9]{2})\2/;
var reg=/[0-9]{4}(-[0-9]{2}){2} [0-9]{2}(:[0-9]{2}){2}/;
console.log(str.match(reg));
</script>
1.7.2模式單元括號的索引
如果沒有括號的嵌套,從左往右計數(shù)
如果有括號嵌套,從外向里計數(shù)。
1.8字符簇
字符簇 含義
\d 數(shù)字
\D 非數(shù)字
\w 字母、數(shù)字、下劃線
\W 非字母、數(shù)字、下劃線
\s 空白字符
\S 非空白字符
\b 單詞的邊界
\B 非單詞邊界
例題
<script type="text/javascript">
var str='我的電話是123456789';
console.log(str.match(/(\d+)/)); //取出字符串中的數(shù)字 123456789
console.log(str.match(/\D+/)); //取出字符串中非數(shù)字
str='鋤 禾 日 當 午';
console.log(str);
console.log(str.replace(/\s/g,'')); //替換所有的空白字符
console.log(str.match(/\S/g)); //["鋤", "禾", "日", "當", "午"]
str='我的學號是Stu_001';
console.log(str.match(/\w+/)); //Stu_001
console.log(str.match(/\W+/)); //我的學號是
str='this is a girl';
console.log(str.replace(/\bis\b/,'isn\'t')); //this isn't a girl
console.log(str.replace(/\Bis\b/,'at')); // that is a girl
str='sunjing010@sina.com.cn.cn';
if(/^\w+@\w+\.\w+(\.\w+)?$/.test(str))
alert('成功');
else
alert('失敗');
</script>
1.9脫字符
脫字符表示不在某個范圍里面
1.10正向預查
在用正則表達式匹配數(shù)據(jù)的時候,取出的數(shù)據(jù)可能還不是我們想要的數(shù)據(jù),我們需要通過輔助條件再次進行篩選。
正向預查就是輔助條件在查詢表達式的右邊。
1.10.1正向匹配
語法:patten(?=模式)
patten:是正則表達式的匹配內(nèi)容
小括號中是輔助條件,輔助條件在正則表達式右邊
<script type="text/javascript">
var stu=['stu001','teacher001','emp002','work0030'];
for(var s in stu){
var array=stu[s].match(/[a-z]+(?=\d{3}$)/);
if(array!=null)
console.log(array[0]); //stu teacher emp
}
</script>
1.10.2正向不匹配
語法:patten(?!模式)
<script type="text/javascript">
var stu=['stu_001','teacher_002','emp_b','work_a'];
for(var s in stu){
var info=stu[s].match(/([a-z]+)_(?!\d+)/);
if(info){
console.log(info[1]); // emp work
}
}
</script>
1.11反向預查
輔助條件在正則表達式左邊
腳下留心:js不支持,PHP支持
1.11.1反向匹配
語法:(?<=模式)patten
文章內(nèi)容 都是 個人收集整理,修改過后的。