原子表
原子表即[],例如\d代表所以數字,即等價於[0-9]
/王三|趙三|李三|張三/ 等價於 /[王趙李張]三/
不匹配這四個可寫成/[^王趙李張]三/
中括號代表匹配其中的任何一個,例如匹配數字和所有的字母,
正則表達式爲/[0-9a-zA-Z]/
量詞
可以使用一些元字符,重複的表示一些原子或元字符
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次
/\d{6}/等價於/\d\d\d\d\d\d/ 即數字出現6次符合要求即匹配成功
/國{10}/ 表示國字出現10次
/中\d{1,}國/ 表示中國之間最少出現一個數字
/中\d*國/ 表示0個或任意個數字
/中\d?國/ 表示0個或1個數字
/中\d+國/ 表示中間最少有一個數字
小試牛刀
<script type="text/javascript">
var reg = /您的驗證碼是\d{6}請儘快輸入/;
var str = '您的驗證碼是666666請儘快輸入';
// 用正則規則去匹配字符串
var result = reg.test(str);
document.write(result);
</script>
小試牛刀
<body>
<script type="text/javascript">
var reg = /國{6}/;
var str = '您的驗證碼是國國國國國國';
// 用正則規則去匹配字符串
var result = reg.test(str);
document.write(result);
</script>
</body>
exec
小試牛刀
可以輸出匹配到的內容,以及匹配到的位置
<body>
<script type="text/javascript">
var reg = /\d\d/;
var str = '您的驗證碼是123456';
// 用正則規則去匹配字符串
var result = reg.exec(str);
console.log(result);
document.write(result);
</script>
</body>
用火狐頁面打開,右鍵點擊頁面,選擇查看元素,然後點擊控制檯,查看輸出信息
看見用exec方法得到的結果是一個對象,或者說是一個數組,數組裏面的0號存
儲的是匹配的內容,對象裏面有匹配到的元素,以及匹配到的下標位置,可以調
用result.index方法輸出下標,document.write(result[0])輸出匹配到的內容
貪婪與非貪婪
小試牛刀
貪婪 即進可能匹配多的內容
<body>
<script type="text/javascript">
var reg = /<p>.*<\/p>/;
var str = '<p>1234</p><p>china</p>';
// 用正則規則去匹配字符串
var result = reg.exec(str);
console.log(result);
document.write(result);
</script>
</body>
禁止貪婪
. 代表匹配任意內容, * 代表匹配0到任意多個,當 .* 組合到一起,就會盡肯多的匹配內容
? 代表0個或1個, .*?組合到一起,就會表示儘可能少的匹配內容
邊界匹配
^ 代表要匹配的字符串開始的地方
$ 代表要匹配的字符串結束的地方
也就是說 正則表達式要匹配整個字符串,整個字符串必須都要符合規則
匹配qq號
reg = /^[1-9]\d{4-10}$/;
匹配身份證號
reg = /^[1-9]\d{16}[Xx\d]$/
小試牛刀-匹配手機號
<body>
<input type="text" id="tel"/>
<input type="button" value="點擊驗證手機號" id="btn">
<script type="text/javascript">
var tel = document.getElementById("tel");
var btn = document.getElementById("btn");
btn.onclick = function(){
var reg = /^1(59|32)\d{8}$/
var result = reg.test(tel.value);
if(result){
document.write("你的手機號合法");
}else{
document.write("你的手機號不合法");
}
}
</script>
</body>