其它基础 - 初识正则表达式

  • 作者:KK

  • 发表日期:2016.2.27


正则表达式是一套符号编写规则,它是有一种规则去规定这些符号怎么写的(包括字母),写这些符号的作用就是去描述一些指定特征的内容

比如针对"我是中国人123321哈哈不是",那么用\d+这三个符号表示里面的1个或多个数字,于是就表示"123321"这一串数字了

具体点,比如你要从上面的字符串中提取出"123321"这些数字,怎么取?代码如下,请填空:

var str = '我是中国人123321哈哈不是';
var number = getNumber(str);
alert(number); //提示结果要是 123321

function getNumber(str){
	//请在这个函数体内填空,实现getNumber函数
	
	
	
	
	
	
	
	
	
}

然后你就会很头疼啦,怎么实现呀?你现在根本不够知识去实现是不是,因为我前面的教程还没教到相关的内容呢


虽然不用正则表达式也可以做到,可是教你,用正则表达式就很容易了喔!来来来看看我的例子:

var str = '我是中国人123321哈哈不是',
	matchResult = str.match(/\d+/);
if(!matchResult){
	//结果为null
	alert('里面没有数字');
}else{
	//结果是一个数组,取第0个元素就是所要的东西
	alert('字符串中包含的数字是:' + matchResult[0]); //123321
}

重点代码在于str.match(/\d+/)这里,其中\d+就是正则表达式的符号内容,左右要用/号包起来,就写成/\d+/就好了,但在其它编程语言里并不一定是这么写的,比如在PHP中可以这么写:#\d+#,所以左右两边的符号不重要,各语言有各语言的规定,但重点是中间\d+部分,大部分语言在这方面都是没有区别的,只有某一小部分有一丁点区别

我再来一个例子,这个例子用正则表达式从字符串里取出b开头的英文

var str1 = '这里是mykbanneraaa';
var str2 = '这里是bankbbb';
var 正则 = /b[a-zA-Z]+/;
var matchResult1 = str1.match(正则);
var matchResult2 = str2.match(正则);
alert('str1里的b开头字母是' + matchResult1[0]);
alert('str2里的b开头字母是' + matchResult2[0]);

其中提示str1里的英文段并不包含my这2个字母,/b[a-zA-Z]+/这个正则表达式描述了以b开头所有字母,所以str1从m开头的my部分不算,banner那里开始就算了

正则表达式大概就是这么一回事,这种行为一般我们称为"正则匹配",它以特定的符号描述了一种匹配模式,看看指定的字符串里是否有匹配的内容,说通俗点就是写几个符号表达你要在字符串里"查找"指定的内容

正则表达式是由一个哲学家创建的,它有自己的一套学问,不是几句话能讲完的,要完全学会真要看很多资料,我这里例举几个常见的知识点来演示一下就算了


几个常见知识点相关的例子

  • 查找英数字下划线组合的内容

    表达式:\w+

    var str = '大家好,我叫小明,网名是Top_andy,我是一个中学生';
    var matchResult = str.match(/\w+/);
    if(matchResult){
    	alert('查找到英数字下划线的内容是:' + matchResult[0]);
    }
    
  • 查找连续2到4个6开头的数字,并且后面的数字不能带有6,比如66,6668,6698742,6666122只要前面是2到4个6开头,但636这样只算是1个6开头

    表达式:6{2,4}[0-57-9]*

    var regExp = /6{2,4}[0-57-9]*/;
    alert('第1个数字是66哦'.match(regExp)[0]);
    alert('第1个数字是6136哦'.match(regExp)); //匹配不到,因为至少要2个6开头
    alert('第1个数字是6668哦'.match(regExp)[0]);
    alert('第1个数字是6698742哦'.match(regExp)[0]);
    alert('第1个数字是6666122哦'.match(regExp)[0]);
    alert('第1个数字是66666122哦'.match(regExp)); //只要6666,因为超出4个6部分的第5个6开始不是要匹配的内容了,
    
  • 查找a标签中的网址

    表达式:<a\shref="(.+)"

    var html = '<div><a href="http://xxx.com/yy.html">超级链接</a><a href="http://xxx.com/yy2.html">超级链接</a></div>';
    var matchResult = str.match(/<a\shref="(.+)"/);
    if(matchResult){
    	alert('网址是:' + matchResult[1]);
    }
    
  • 查找字符串中的邮箱

    表达式:^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$

    var email = prompt('请输入您的邮箱'); //比如输入 abc@xxx.com
    var matchResult = email.match(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/);
    if(matchResult){
    	alert('输入正确 ^-^');
    }else{
    	alert('输入错误,邮箱格式不正确!');
    }
    

希望以上例子可以让你清楚正则表达式有什么作用,以后开发中大家偶尔会需要借助正则表达式去完成一些查找/匹配工作,比如要匹配一个字符串是不是一个合法的网址,就上网查'正则表达式匹配网址'之类的提问关键字就可以找到答案了