欢迎光临
我的个人博客网站

解析Js 正则表达式


Js正则表达式

  • 正则表达式是对字符串操作的一种逻辑公式

  • 这里推荐一个正则表达式的在线测试网站:正则表达式在线测试

正则语法

  • 在 JavaScript 中,正则表达式也是对象,是一种索引类型。
* 使用一个正则表达式字面量是最简单的方式。两个 / 是正则表达式的定界符。  * 创建正则的方法有两种: 
  //创建正则的第一种方法 , 正则的字面量   var reg = /abc/;   //第二种,通过 构造函数  的创建   var reg1 = new RegExp("adf") 

使用正则,如下代码:

 var str = "aaababggbdssddbbssGGGwew"; console.log(str.match(/s+/));  //修饰符g 实现全局查找  console.log(str.match(/s+/g));  // i 修饰符   字母大小写不敏感  console.log(str.match(/g+/ig)); 
正则表达式方法结合字符串的方法使用

字符串的方法:

  • split() 根据匹配字符串切割父字符串
 //与字符串相关方法   split ---- 分割  // split方法:分隔字符串,成为一个数组   var str = "aaa     cde ssss rrrrrre eeer";  //使用一个空格字符进行精确分隔  var str1 = str.split(" ");  console.log(str1)  // 使用正则表达式进行模糊匹配分割  var str2 = str.split(/s+/);//空白(s)出现一次或是多次(+)  console.log(str2); 
  • match() 使用正则表达式与字符串相比较,返回一个包含匹配结果的数组。
// match 寻找匹配字符串 //aaansdddsopqwqeieaaaaasdffff   寻找重复的a var a = "aaansdddsopqwqeieaaaaasdffff"; console.log(a.match(/a+/));//匹配了第一个后就结束 // 边界符,全局修饰符---g,如果有全局修饰符g,会找到所有匹配的字符串后结束 console.log(a.match(/a+/g));//匹配了第一个后就结束  var a2 = "aaa o   obbb o       o   aaa"; console.log(a2.match(/os+o/g));//找"o    o" 
  • search() 对正则表达式或指定字符串进行搜索,返回第一个出现的匹配项的下标。
//search--- 找出搜索字符串在父字符串的位置,返回的是位置  var s = "addhed";  console.log(s.search("e"));  console.log(s.search(/dh/));  //search与indexof不同的是,search支持正则表达式 
  • replace() 用正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。
 //replace  替换字符串为指定字符串,原始字符串不受影响  var a3 = "alo hahaha hei";  console.log(a3);  console.log(a3.replace(/hei/,"hello")); 

正则表达式方法:

  • exec() 在目标字符串中执行一次正则匹配操作。
// 正则方法------exec    寻找匹配字符串,找到停止(全局修饰符也没用) var a4 = "aaabssdertttr"; console.log(/ab/.exec(a4)); 
  • test() 测试当前正则是否能匹配目标字符串
//test 检测字符串是否符合正则表达式的规则 , 返回布尔值 console.log(/ab/.test(a4)); console.log(/aeb/.test(a4)); 
如何在一个字符串内换行不报错,将字符串的双引号换成即可反引号 
正则的术语
* 字符集:字符集 [ ] ,字符中的一个字符串,多选一效果,有一个满足就算匹配成功    * 简单类: 正则的多个字符对应一个字符,我们可以用 [] 把它们括起来,让 [  ] 这个整体对应一个字符[abc] 
//简单类:多个可能匹配的字符连续写在一起,只要其中一个匹配成功即可 var reg = /[abd]/; console.log(reg.test("aafaasd")); 
  • 范围类: 有时匹配的东西过多,而且类型又相同,全部输入太麻烦,我们可以在中间加了个横线。[a-z]、[0-9]、[A-Z]
 //范围类  匹配同一类型且连续在一起的字符,中间-连接  var r2 = /[0-9]/;  console.log(r2.test("233oiuoisd"));  var r3 = /[a-z]/;  console.log(r3.test("233oiuoisd")); 
  • 负向类: [] 前面加个元字符进行取反,表示匹配不能为括号里面的字符。[^a]
//负向类  [^a]---- 只要不是a就匹配成功   (^和[]一起用) var r4 = /[^e-h]/; console.log(r4.test("233oiuoisd")); 
  • 组合类: 允许用中括号匹配不同类型的单个字符。[0-9a-b]
 //组合类  单一类型或简单类 并不能匹配所有结果  //将多个写法书写在一起  var r5 = /[0-9a-z]/;  console.log(r5.test("233oiuoisd")); 
//如果数字、大写字母、小写字母,按照这种顺序书写完整的范围,可以进行缩写 // [0-Z]、[0-z] var r6 = /[0-Z]/; console.log(r6.test("233oiuAoisd")); 
  • 修饰符

    • g 修饰符用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

    • i 修饰符用于执行对大小写不敏感的匹配。

var str = "aaababggbdssddbbssGGGwew"; console.log(str.match(/s+/)); //修饰符g 实现全局查找 console.log(str.match(/s+/g)); // i 修饰符   字母大小写不敏感 console.log(str.match(/g+/ig)); 
  • 边界

    • ^ 开头 注意不能紧跟于左中括号的后面

    • $ 结尾

var str = "hello**world";  //开头 ^ ,表示限制开头,后面的正则内容匹配的结果必须是字符串的开始  //  ^ ,不要和[]一起用,否则会变成反向类 console.log(/^hello/.test(str));  //结尾 $ ,表示结尾,前面的正则内容匹配的结果必须是字符串的结尾 console.log(/ld$/.test(str)); 
  • 预定义类

    • .(点) 除了换行和回车之外的任意字符
    • d 数字字符
    • D 非数字字符
    • s 空白字符
    • S 非空白字符
    • w 单词字符(所有的字母/数字/下划线)
    • W 非单词字符
* 量词    * {n}        硬性量词 :对应零次或者n次 
  // {n}   硬性量词   对应出现零次 或 n次   //  /^$/限制内容为   console.log(/^d{5}$/.test("123"));//false   console.log(/^d{5}$/.test("12345"));//true   console.log(/^d{5}$/.test("123456"));//false 
  • {n,m} 软性量词 :至少出现n次但不超过m次(中间不能有空格)
  //{n,m}  软性量词   至少出现n次但不超过m次(中间不能有空格)    console.log(/^d{5,7}$/.test("124443"));   console.log(/^d{5,7}$/.test("1244999943")); 
  • {n,} 软性量词 :至少出现n次(+的升级版)
//{n,}    软性量词   至少出现n次(+的升级版) console.log(/^d{5,}$/.test("124443")); 
  • ? 软性量词: 出现零次或一次
 //?       ------    出现零次或一次  console.log(/^d{0,1}$/.test("2"));  console.log(/^d?$/.test("3"));  console.log(/^d{0,1}$/.test("124443"));  console.log(/^d?$/.test("124443")); 
  • * 软性量词 :出现零次或多次(任意次)
  //*       ------    出现零次或多次(任意次) console.log(/^d*}$/.test("124443"));  console.log(/^d*$/.test("")); 
  • + 软性量词 :出现一次或多次(至少一次)
//+       ------    出现一次或多次  (至少一次)  console.log(/^d+$/.test("124443"));  console.log(/^d+$/.test("")); 
  • 分组:用中括号表示范围内选择,大括号表示重复次数。如果想获取重复多个字符,就用小括号进行分组
// 匹配 连续重复出现字符串 console.log(/^(abc){2}$/.test("abcabc")); console.log(/^(abc){2}$/.test("aabbcc")); 
  • 或操作符
//或操作符 // 竖线(|) // /a|bd/   匹配a或bd  a、bd都出现也是对的 console.log(/^a|abc$/.test("aabcabc")); 
分组和或组合使用
// a、bd二选一时   分组和或搭配使用 console.log(/^(a|bd)$/.test("abd")); console.log(/^(a|bd)$/.test("bd")); console.log(/^(a|bd)$/.test("ab"));  // /(ab)+|(cd)+/   匹配出现一次或多次的ab或cd console.log(/^(ab)+(cd)+$/.test("abcaadcdcdcdabc")); 
  • 分组的反向引用
//分组的反向引用 // 正则中通过分组匹配到的字符串,会被进行编号,从1开始 // 在正则内部可以通过 1 方式,去对字符串进行反向引用 console.log(/^([a-z]{3})1$/.test("abcabc")); console.log(/^([a-z]{3})1$/.test("abcadc")); 
String函数replace的语法格式是stringobject.replace(reg/str,replacement),replacement可以是字符串也可以是函数。结合分组的反向引用可以实现对字符串的更多操作
//正则表达式以外  $1 ,进行字符串引用  多用于replace var str = "123*499".replace(/^(d{3})*(d{3})$/,"$2*$1"); console.log(str);  //replace 的第二个参数还可以是函数 var str2 = "111*222".replace(/^(d{3})*(d{3})$/,function(match,$1,$2){ return $2*10 + "," + $1; }); console.log(str2); 
  • 中文字符
    匹配中文:[u4e00-u9fa5]
// [u4e00-u9fa5] console.log(/^[u4e00-u9fa5]+$/.test("中文字符集")); console.log(/^[a-zu4e00-u9fa5]+$/.test("中文字符集a"));//只要不全是中文就是false 
赞(0) 打赏
未经允许不得转载:张拓的天空 » 解析Js 正则表达式
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏