js正则表达式

正则表达式

  是一种规则,让计算机能读懂人类的规则。
  它操作的都是字符串,不操作其他数据类型。
  正则的操作方法也属于字符串操作方法的范围内。

  js中大部分判断可以用正则,但实现项目并不会这样做。
  所以一般是用来判断注册时的手机号、邮箱等。

  如何定义正则
  方法1
var re=//; //正则最常用,最简单的定义方法
  方法2
var re=new RegExp(''); //一般不用这种方法
  常用的正则操作方法
  test 正则去匹配字符串,成功返回真,不成功返回假。所以一般用来判断。
    并且,只要匹配到字符串就返回真,后面的不再去看。
  语法: 正则.test(字符串);

  例:
var str='abcde';
var re=/b/;
console.log(re.test(str)) //true
re=/g/;
console.log(re.test(str)) //false
re=/B/; //大写的
console.log(re.test(str)) //false 正则是区分大小写的
re=/B/i; //加 i 忽略大小写,注意一定要写在最后面
ocnsole.log(re.test(str)) //true
  在正则中的一些符号意义:
  | 表示“或”
  \w 字符
  \W 非字符
  \d 数字
  \D 非数字
  \s 空格
  \S 非空格
  \b 独立
  \B 非独立

  字符
    字母,数字,下区线
  独立部分
    以它作为开始位置,或才结束位置,或者用空格隔开的。
    要么是头,要么是尾,要么是空格格开的。

  例:
var str='122';
var re=/\b1/;
console.log(re.test(str)) //true 匹配在开头位置的1
 
var str='221';
var re=/1\b/;
console.log(re.test(str)) //true 匹配在末尾位置的1
 
var str='21 2';
var re=/1\b/;
console.log(re.test(str)) //true 匹配在空格在后面的1
 
var str='2 12';
var re=/\b1/;
console.log(re.test(str)) //true 匹配在空格前面的1

search

  用来搜索相应字符串,返回第一个找到位置,未找到返回-1。
  不支持全局查找。
  语法: str.search(re)
var str='abcde';
var re=/e/i;
console.log(str.search(re)); //4 返回找到的位置

match 把匹配成功的项保存到数组

  把匹配到的位置保存到数组中。
  语法: 字符串.match(正则)
  如果需要查找所有,需要用 /g (全局查找)
//把查找到的内容全部保存在数组里
var str='agh123gh456dp789ghdphg';
var re=/\d/;
console.log(str.match(re)) //'1'
re=/\d+/;
console.log(str.match(re)) //'123'
re=/\d+/g;
console.log(str.match(re)) //[ '123', '456', '789' ]

replace 查找替换

  语法: 字符串.replace(正则,newstr)
var str='aaca';
var re=/a+/g;
var newStr=str.replace(re,'b')
console.log(newStr) //bcb 因为有 + 匹配多个
re=/a/g;
newStr=str.replace(re,'b')
console.log(newStr) //bbcb

例,脏话替换

  把: 这是一句脏话,这真的是一句脏话
  换:*是一句*,*真的是一句*
var str='这是一句脏话,这真的是一句脏话';
var re=/这|脏话/g;
console.log(str.replace(re,'*')); //*是一句*,*真的是一句*
  replace 的第二个参数不只是可以使用字符串,还可以是您匿名函数。
  匿名函数可以最多有99个形式参数所替换。
  $1-$99 与正则中第1个到第99个子表达式相匹配的文本。

  $0 表示当前查找到的项。
  可以是 $0-$99 ,表示
var str='这是一句脏话,这真的是一句脏话';
var re=/这|脏话/g;
console.log(str.replace(re,function($0){ //$0是匹配成功的项,是一种固定形式
  var sl='';
  for(var i=0;i<$0.length;i++){
    sl+='*'
  }
  return sl
}));

例,回顾一下,字符串的排序。

//按顺序排列 abcdefg
var str='badecgf';
/*var arr=[];
for(var i=0;i<str.length;i++){
  arr.push(str[i])
}*/
console.log(str.split('').sort().join(''))
  括号 ()
  把单独的项目组成子表达式,以便可以便处理一个独立的单元那样用*、+、?来处理那些项目。
  如 /(ab|cd)+|ef/
  /ab|cd+|ef/
  \1 表示重复出现的子项。


  量词 {}
  表示出现的次数。
  *、+、m 也是量词,只是因为用得多而使用的简单表示。
  {0,} * 0次以上。
  {1,} + 1次以上。
  {0,1} ? 0次或1次。

  {n,m} 最少出来n次,最多出现m次。
  {n} 正好出现n次。
  {n,} 至少出现n次。

  字符类,不确定 []
  任意字符。
  [abc] abc中任意一个出现都可以。
  比如: /o[sub]t/ 可以匹配: ost、out、obt。

  范围
  [a-z] 所有小写字母
  [0-9] 所有数字
  [a-z0-9] 所有小字字母或数字。注意,不用或号 | ,也不用空格 。

  收尾 ^ $
  ^开始
  $结束
  注意: 在中括号 [ ] 中, ^ 表示取反。

例,找出最多的那个字符

var str='ansssstrcssfdssssfsdddfrsserbdfssssdsss';
var newStr=str.split('').sort().join('') //排序过
console.log(newStr)
var re=/(\w)(\1)+/g;
var index=0; //记录出现的次数
var val=''; //记录谁出现的
var aa=newStr.replace(re,function($1,$2){ //使用 replace 是为了使用里面的函数
  console.log($1);
  console.log($2); //abc没有出现,因为他没有重复出现
  if(index<$1.length){
    index=$1.length;
    val=$2;
  }
})
console.log('最多的字符是 '+val+'出现了'+index+'次')

判断手机号码

  判断是不是手机号码
  1开头,第二个,3/5/7/8,共11位
  /^1[3578]\d{9}/ 不加$
  /^1[3578]\d{9}$/ 加$
  如果不加$结束号,那只要最后一位匹配正确情况正还要继续匹配,造成 12位、13位以上也是手机号的错误
var txt='13123456789';
var re=/^1[3578]\d{9}$/;
re.test(txt) ? console.log('是手机') : console.log('不是手机')
//^1 第1位是1
//[3578] 第2位是3578中的某位
//\d{9} 后面的是数字,并且有9位

判断QQ号

  判断QQ号
  1到9开头,共5到11位
var str='12345123451';
var re=/^[1-9]\d{4,10}$/;
console.log(re.test(str))

posted @ 2017-02-06 11:04  程序媛李李李李蕾  阅读(354)  评论(0编辑  收藏  举报