正则表达式

初识:

正则表达式的作用:匹配特殊字符或者有特殊搭配原则的字符的最佳选择

//创建方式:
//1. var reg=/abc/mgi;
//2. var reg1=RegExp("abc","mgi"); 

正则表达式的三个属性:
g:全局匹配
i:忽视大小写
m:执行多行匹配
/^a/:(匹配以a开头的a)

//关于属性 m
var reg=/^a/gm;  
var str="abcde\na";  //加上m属性后可以匹配到两个a

reg.text(); 匹配字符串中是否有相同顺序的字符
str.match() 将匹配相同的字符串全部打印出来


表达式[]:

var reg=/[范围][][]/g;
//eg:[0123]范围是:0,1,2,3    []叫表达式,一个[]代表一位 此处表示匹配三位  从匹配完的下一位开始看
//   [0-9A-z]都可以  注意:空格等字符都可以作为有效的范围

var reg=/[1234567890][1234567890][1234567890]/g;
    var str="hello9899world1212hi14213i3i3i3";

这里写图片描述

var reg=/[ab][cd][d]/g;   //注意:不可以有任意多余的空格
                       eg:var reg=/[ab] [cd] [d]/g; 这样写结果为:null
var str="abcd";    //结果:"bcd"被匹配出来

[^a](匹配非a)

//例1.
var reg=/[^a][^b]/g;
var str="ab1cb";

//例2.
var reg=/[^a] [^b]/g;
var str="ab 1cb";   

这里写图片描述 (例1.)
这里写图片描述(例2.)

var reg=/(abc|bcd)/g;   //匹配abc 或bcd

元字符:

//可以在表达式里面写多个元字符;
\w===[0-9A-z_]
\W===[^\w]

\d===[0-9]
\D===[^\d]

\s===[\t\n\r\v\f ] 
//查找空白字符 (空格符 , tab\t, 回车\r, 换行\n, 垂直换行符\v, 换页符\f)
\S===[^\s]

\b===单词边界
\B===非单词边界
   var reg=/\babc\b/g;
   var str="hello abc world";  //结果["abc"]

\t
   var reg=/\ta/g;
   var str="hello   abcworld";  
 //var str="hello\tabcworld";   //匹配结果都为:[" a"]

\uxxxx //(查找以十六进制数xxxx规定的 Unicode 编码可以匹配汉字 范围\u0000~\uffff)

.===[^\r\n]

//一个可以包含一切字符的
var str=/[\d\D]/g;

量词:

原则:贪婪匹配 (非贪婪匹配 在量词的后面加一个? 例如:n+?)

n+  {1,+} //可以出现1~无数次 n 为一个变量
n*  {0,+}

   var reg=/\w*/g;
   var str="abc"   //结果:["abc", ""]
                //原因 当匹配上"abc"后光标在c的后面 全局匹配 所以就再匹配出""

   var reg=/\d*/g;
   var str="abc"  //结果: ["", "", "", ""]  


n? {01}
n{X} {X}   //X个X个匹配
n{x,y}    //区间 x~y 贪婪匹配原则(n{3,4})能4个匹配就不会3个匹配!!!
n{x,}  //x~正无穷
   var reg=/\w{3}/g;  //!!注意此处是\w匹配
   var str="aaaaaaaaaaaa"  //结果:["aaa", "aaa", "aaa", "aaa"]

/ab$/ (已b结尾的)

//检验一个字符串首尾都有数字
var reg =/^\d[\s\S]*\d$/g;

正则表达式上的方法:
text();
exec();

var reg=/ab/g; //没有g的时候光标会一直再0的位置,不会向下便利
        var str="abab";
        console.log(reg.lastIndex,reg.exec(str)); //reg.lastIndex 记录光标当前所处的位置
        console.log(reg.lastIndex,reg.exec(str));
        console.log(reg.lastIndex,reg.exec(str));
        console.log(reg.lastIndex,reg.exec(str));
        console.log(reg.lastIndex,reg.exec(str));

这里写图片描述

var str="aabb";  //匹配 aabb 形式
        var reg=/(\w)\1(\w)\2/g;  //(\w)子表达式,\1反向引用第一个子表达式,\2反向引用第二个系表达式 
        console.log(reg.exec(str)); //结果如下图

这里写图片描述
字符串上的方法:
match(); 匹配多个必须加上条件
replace(); 只能匹配一个

var str="aabb";  //匹配 aabb 形式 以bbaa形式输出
        var reg=/(\w)\1(\w)\2/g;   
        console.log(str.replace(reg,"$2$2$1$1"));  //结果:bbaa   后面内容用字符串包裹起来
        //$2 第二个子表达式的内容 $1 第一个子表达式的内容
//例1. 将the-first-name 这种形式的字符串转换为 theFirstName

var reg=/-(\w)/g;
var str = "the-first-name";
console.log(str.replace(reg,function($,$1){  //传入内容和第一位子表达式  当然也可以这样写:(str,$1)
  return $1.toUpperCase(); 
}))

正向预查:
(?=n)
(?!=n)

//例 1.选出a的字符串 a的限定条件后面紧跟一个b(但是选择输出时不能输出b)
var str="abaaaaa";
var reg=/a(?=b)/g;  //结果 "a" 只选取出一个字符串 ["a"]

练习:

//例1.
var str="aa\\aa\\aa";  //正则表达式匹配\ ? * 等要加转意符号
var reg=/\\/g;   //str.match(reg) 结果:["\", "\"]
//例2.字符串去重
var str="aaaaaaaaabbbbbbcccc";
var reg=/(\w)\1*/g;
console.log(str.replace(reg,"$1"));  //结果:abc
//例3.将下列字符串转换为100.000.000 每隔三个打一个点

var str="100000000";
       前面是非单词边界,从后往前查,查3的位数个
var reg=/(?=(\B)(\d{3})+$)/g;
console.log(str.replace(reg,"."));   //结果:100.000.000
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值