也许你现在还没意识到正则表达式的重要性,或者面对它繁杂的语法而无从下手,那么看完这篇博文你将豁然开朗。
博主将列举几个比较鲜明的例子帮助你理解。
1.判断一个字符串里是否包含数字,如果有,返回true;否则返回false;
拿到这个需求,首先我们脑中会想:
1)首先我们得遍历一下字符串里的每个字符吧;
2)然后要对每个字符进行判断;
3)需要把每个字符都转换成数字才能知道是否包含数字吧;
4)对于非数字,需要用到isNaN()这个方法或者其他方法判断
那么需要用到哪些方法呢?
1)charAt(index)用于字符串返回指定位置的字符
2)parseInt(value)用于将字符串转换为数值,不能转为数值的返回NaN(非数值);
3)isNaN()用于判断一个值是否为NaN,是返回true,不是返回false
注意不能用value==NaN来判断一个变量是否为非数值,因为NaN!=NaN
好了,让我们用最最常规(ben)的思想把这个方法实现吧。
function containsNumber(str) {
for(var i=0;i<str.length;i++){
var value=parseInt(str.charAt(i));
if(!isNaN(value)){
return true;
}
}
return false;
}
是不是有一种写完人都要老了的感觉
让我们看看隔壁用正则表达式实现的方式
function containsNumber(str) {
var d=/\d/;
return d.test(str);
}
注:\d匹配一个数字
这也太….太简单粗暴了吧,就这么两三行就实现了上面五六七八九行的功能,是不是觉得很方便呢?
让我们继续看下面的例子
2.给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false
笨方法:
1)遍历字符串
2)对比当前字符和紧挨的下一个字符是否相同
3)遇到相同的直接返回true,无需继续比较
function containsRepeatingLetter(str) {
var len=str.length-1;
for(var i=0;i<len;i++){
var k=str.charAt(i);
if(k===str.charAt(i+1)&&isNaN(parseInt(k))){
return true;
}
}
return false;
}
使用正则表达式
function containsRepeatingLetter(str) {
return /([a-zA-Z])\1/.test(str);
}
这里()括号包含的就是属于一个分组
[a-zA-Z]匹配一个a-z或者A-Z字母
\1代表引用第一个分组,也就是第一个分组是a,引用的也只能是a,\2代表引用第二个分组
是不是很强大呢
未完待续