转码日记——Javascript笔记(10)正则表达式

正则表达式

用于定义字符串的规则,计算机可以根据正则表达式来检查一个字符串是否符合规则,或将字符串中符合规则的内容提取出来。

(1)创建正则表达式对象

var reg = new RegExp("正则表达式","匹配参数");//两个都是字符串

(2)test( )方法 — 用于检查一个字符串是否符合正则表达式的规则,符合规则返回true,否则返回false

var reg2 = new RegExp("a");
//这个正则表达式可以用来检查字符串中是否含有a
var str = "abcd";
var result = reg2.test(str);
console.log(result); //返回true
console.log(reg2.test("bc")); //返回false

(3)匹配参数可以是i (忽略大小写),也可以是g(全局匹配模式),也可以是gi/ig,既全局匹配又忽略大小写。

(4)也可以使用字面量创建正则表达式

var reg = /正则表达式/匹配模式;
var reg = /a/i;

//创建正则表达式查询a或b
var reg2 = /a|b/; //a、b之间是竖线,没有的话就是a和b
//也可以使用[]表示或的关系
var reg2 = /[ab]/;

reg2 = /[a-z]/; //a-z任意小写字母
reg2 = /[A-z]/; //任意字母

//检查一个字符串是否含有adc aec afc
reg2 = /a[def]c/;

//除了[]里面的都行
reg2 = /[^ab]/;
reg2 = /[^0-9]/; //除了数字都可以

(5)字符串和正则相关的方法

split( ) — 将字符串拆分成数组,即使不指定全局,也会全部拆分。

var str = "1a2b3c4d5e6f7";
var result = str.split(/[A-z]/); //传递正则表达式作为参数,这样方法就会根据正则拆分字符串
//用正则表达式拆分更灵活,不然就写死了
console.log(result);

search ( ) — 搜索字符串中是否有指定字母,和indexOf( )基本是一致的,但是它可以接受正则表达式。只会查找第一次出现的内容,即使设置全局匹配,也只查找第一个。

match( ) — 可以根据正则表达式,从一个字符串中提取出符合条件的内容并将其封装成一个数组返回,即使只查询到一个结果。

//提取所有的字母
var str = "1A2b3c4d5e6f7";
var result = str.match(/[a-z]/i); //只能提取出第一个符合要求的内容,找到就停止
console.log(result);

//正则表达式该为全局匹配模式则可以都获取
var str = "1A2b3c4d5e6f7";
var result = str.match(/[a-z]/gi); 
console.log(result);

replace( ) — 可以将字符串中的指定内容替换为新的内容;参数:1. 被替换的内容,可以是一个正则表达式 2. 新的内容;不会影响到原字符串

var str = "1a2a3a4a5e6r7f8g";
var result = str.replace(/a/g, "@");
console.log(result);

(6)量词 — 通过量词可以设置一个内容出现的次数,但是量词只对前面的一个词起作用

{n} 正好出现n次,{m-n} 出现m-n次,{m, } 出现m次以上

var arg = /a{3}/; //代表查找3个a {n}正好出现n次
var arg = /(ab){3}/; //加上括号代表是3个ab,不然是abbb
arg = /ab{3}c/; //abbbc
arg= /ab{1,3}c/; //b出现1-3次

+表示至少一个,相当于{1,} 

* 表示{0,}

? 表示 {0,1}

reg = /ab+c/; //至少一个b
reg = /ab*c/;
reg = /ab?c/;
console.log(reg.test("abc"));

(7) ^表示开头,检查字符串是否以某个字母开头; $表示结尾

reg = /^a/;
console.log(reg.test("bcda")); //false

/^a$/; //既是开头也是结尾,只能是a本身
/^a|a$/; // 以a开头或者是以a结尾

小练习

//创建一个正则表达式检查是否为手机号
var phoneStr = "1234";
var str =/^1[3-9][0-9]{9}$/;  //$保证最后一个是数字
console.log(str.test(phoneStr));

.表示任意字符,如果只是单纯想检查该标点,需要写上转义字符\,用\.来表示.   \\表示\

//检查一个字符串中是否有点
var str1 = /./; //检查任意字符串都会返回true
var str1 = /\./; //这样才可以检查.
var str1 = /\\/; //这样才可以检查\

注意:使用构造函数创建正则表达式时,由于其参数是一个字符串,而\是字符串中的转义字符,如果需要使用\则需要写\\

var reg = new RegExp("\.");
console.log(reg); //只返回/./
//在构造函数中如果想要使用\则需要写\\两个
var reg = new RegExp("\\."); //这样才是/\./

//如果用字面量创建正则表达式只需要写一个
var reg = /\./;

\w 匹配字母或数字或下划线或汉字 ; \W 除了字母、字和下划线
\s 匹配任意的空白符 ; \S 除了空格
\d 匹配数字 ; \D 匹配非数字
\b 匹配单词的开始或结束(单词边界)—确保是一个单独的单词; \B 除了单词边界 

//创建一个正则表达式看检查是否有单词child
var reg = /child/; //如果这样写的话只要里面含有这些字母就会返回true,但我们要的是单词
var reg = /\bchild\b/; //使用\b建立单词边界,只有这个单词出现才返回true

//去掉用户名的空格

//接收用户名
var str = prompt("请输入你的用户名:");
//去掉空格
//使用空串替换空格
str = str.replace(/\s/g,""); //要设置全局匹配
console.log(str);

//如果用户名是    he   llo 中间有空格
//保留中间的空格就是去掉开头和结尾的空格

//去除开头空格
str = str.replace(/^\s*/,""); //* 0个或多个

//去除结尾空格
str = str.replace(/$\s*/,"");

//同事去除开头结尾
str = str.replace(/^\s|$\s/g,""); //全局匹配确保同时去除

邮件的正则

// 任意字母数字下划线,至少三位
\w{3,}

// .任意字母数字下划线,整体有没有都行
(/.\w+)*

//任意字母数字
[A-z0-9]+

//任意字母数字,二到五位,整体一两个都行
([A-z0-9]{2,5}){1,2}

var emailReg = /^\w{3,}(/.\w+)*@[A-z0-9]+([A-z0-9]{2,5}){1,2}$/;
//最后加上^$确保整个邮件都符合当前条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值