正则表达式

2018-08-22  本文已影响0人  whowhenhowxxx

/正则表达式主体/修饰符(可选)

在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。

image.png

正则表达式模式

image.png image.png image.png

正则表达式表单验证实例:

/*是否带有小数*/
function    isDecimal(strValue )  {  
   var  objRegExp= /^\d+\.\d+$/;
   return  objRegExp.test(strValue);  
}  

/*校验是否中文名称组成 */
function ischina(str) {
    var reg=/^[\u4E00-\u9FA5]{2,4}$/;   /*定义验证表达式*/
    return reg.test(str);     /*进行验证*/
}

/*校验是否全由8位数字组成 */
function isStudentNo(str) {
    var reg=/^[0-9]{8}$/;   /*定义验证表达式*/
    return reg.test(str);     /*进行验证*/
}

/*校验电话码格式 */
function isTelCode(str) {
    var reg= /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
    return reg.test(str);
}

/*校验邮件地址是否合法 */
function IsEmail(str) {
    var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
    return reg.test(str);
}
image.png

一般[]中的字符没有特殊含义 如+就表示+
但是像\w这样的还是有特殊含义的
[]中,不会出现两位数
()的提高优先级功能:凡是有|出现的时候,我们一定要注意是否有必要加上()来提高优先级;

当我们加()只是为了提高优先级而不想捕获小分组时,可以在()中加?:来取消分组的捕获

image.png
()  []  {} 的区别
() 的作用是提取匹配的字符串。表达式中有几个()就会得到几个相应的匹配字符串。比如 (\s+) 表示连续空格的字符串。
[] 是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示字符文本要匹配英文字符和数字。
{} 一般用来表示匹配的长度,比如 \d{3} 表示匹配三个数字,\d{1,3} 表示匹配1~3个数字,\d{3,} 表示匹配3个以上数字。 
^ 与 $
^ 匹配一个字符串的开头,比如 (^a) 就是匹配以字母a开头的字符串
$ 匹配一个字符串的结尾,比如 (b$) 就是匹配以字母b结尾的字符串
^ 还有另个一个作用就是取反,比如[^xyz] 表示匹配的字符串不包含xyz

$1 与 \1

$1-$9 存放着正则表达式中最近的9个正则表达式的提取的结果,这些结果按照子匹配的出现顺序依次排列。基本语法是:RegExp.$n ,这些属性是静态的,除了replace中的第二个参数可以省略 RegExp 之外,其他地方使用都要加上 RegExp 。

//使用RegExp访问
/(\d+)-(\d+)-(\d+)/.test('2016-03-26') 
  
RegExp.$1  // 2016
RegExp.$2  // 03
RegExp.$3  // 26
 
//在replace中使用
'2016-03-26'.replace(/(\d+)-(\d+)-(\d+)/, '$1年$2月$3日')  
// 2016年03月26日

\1 表示后向引用,是指在正则表达式中,从左往右数,第1个()中的内容,以此类推,\2表示第2个(),\0表示整个表达式。

//匹配日期格式,表达式中的\1代表重复(\-|\/|.)
var rgx = /\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}/
 
rgx.test('2016-03-26') // true  
 
rgx.test('2016-03.26') // false

两者的区别是:\n 只能用在表达式中,而 $n 只能用在表达式之外的地方。

test 与 match

test则是用来检测字符串是否匹配某一个正则表达式,如果匹配就会返回true,反之则返回false
match是获取正则匹配到的结果,以数组的形式返回

replace([RegExp|String], [String|Function])

如果第1个参数是 RegExp,JS会先提取RegExp匹配出的结果,然后用第2个参数逐一替换匹配出的结果
如果第2个参数是回调函数,每匹配到一个结果就回调一次,每次回调都会传递以下参数:

result: 本次匹配到的结果
1,...9: 正则表达式中有几个(),就会传递几个参数,1~9分别代表本次匹配中每个()提取的结果,最多9个
offset: 记录本次匹配的开始位置
source: 接受匹配的原始字符串
var str = 'abbbbAAbcBCCccdaACBDDabcccddddaab';
str = str.toLowerCase().split('').sort(function(a,b){return a.localeCompare(b)}).join('');

var reg = /(\w)\1+/ig;
var maxStr = '';
var maxLen = 0;
str.replace(reg,function($0,$1){
    var regLen = $0.length;
    console.log('s0',$0);
    console.log('s1',$1);
    if(regLen>maxLen){
        maxLen = regLen;
        maxStr = $1;
    }else if(maxLen == regLen){
        maxStr += $1;
    }
})
console.log(`出现最多的字母是${maxStr},共出现了${maxLen}次`)

注意$0代表返回的整个结果

var str = 'assssjdssskssalsssdkjsssdss';

var arr = str.split(''); //把字符串转换为数组
str = arr.sort().join(''); //首先进行排序,这样结果会把相同的字符放在一起,然后再转换为字符串
//alert(str);  // aaddjjkklsssssssssssssssss

 var value = '';
 var index = 0; 
var re = /(\w)\1+/g;  //匹配字符,且重复这个字符,重复次数至少一次。
str.replace(re,function($0,$1){ 
   //alert($0);   代表每次匹配成功的结果 : aa dd jj kk l sssssssssssssssss
     //alert($1);  代表每次匹配成功的第一个子项,也就是\w:  a d j k l S 
  
    if(index<$0.length){  //如果index保存的值小于$0的长度就进行下面的操作
          index = $0.length;  // 这样index一直保存的就在最大的长度
           value = $1;  //value保存的是出现最多的这个字符
    }

}); 

alert('最多的字符:'+value+',重复的次数:'+index);  // s   17
//中文,全角,半角匹配:
 str="中文;;a"    
  alert(str.match(/[\u0000-\u00ff]/g))     //半角  
  alert(str.match(/[\u4e00-\u9fa5]/g))     //中文  
  alert(str.match(/[\uff00-\uffff]/g))     //全角

判断是不是QQ号:

//首先想QQ号的规则 
      1 首位不能是0 
      2 必须是 5-12位的数字
   
    var aInput = document.getElementsByTagName('input');
    var re = /^[1-9]\d{4,11}$/;
    //123456abc为了防止出现这样的情况,所以必须限制最后
    //首位是0-9,接着是4-11位的数字类型。
aInput[1].onclick = function(){
    if( re.test(aInput[0].value) ){
        alert('是QQ号');
    }else{
        alert('不是QQ号');
    }

};

去掉前后空格:

var str = '  hello  ';
alert( '('+trim(str)+')' );//为了看出区别所以加的括号。 (hello)
function trim(str){
   var re = /^\s+|\s+$/g; // |代表或者   \s代表空格  +至少一个    前面有至少一个空格 或者后面有至少一个空格 且全局匹配
  return str.replace(re,''); //把空格替换成空
}
上一篇 下一篇

猜你喜欢

热点阅读