javascript之正则表达式

问:正则表达式是用来做什么的?

答:匹配字符串

1.创建(两种方法)

(1)var reg = /xyz/;                //字面量新建

(2)var reg = new RegExp('xyz'); //实用RegExp对象的构造函数

2.直接用

    var reg = /^<(\w+)([^>]{0,})>(.*?)<\/\1>/g;
    var html = '<div class="test">Hello<b>world</b></div>';
    var match = reg.exec(html);
    console.log(match[1]);      //div
    console.log(match[2]);      //class="test"
    console.log(match[3]);      //Hello<b>world</b>

由这段代码

(1)字面量字符和基本元字符

  • 字面量字符:就是字面的含义,比如/a/匹配的就是a
  • 点字符(.),匹配除回车(\r),换行(\n),行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。
  • 位置字符(^,$):^表示字符串的开始位置,$表示字符串的结束位置
  • 选择符(|):|表示或关系,比如/aaa|bbb/表示匹配aaa或bbb
  • 转义符(\):那些有特殊含义的字符,如果要匹配他们本身,需要在他们前面加上反斜杠\,比如\?

(2)先看符号(),[],{}(也是元字符)

  • ():表示组匹配,放在( )里面的字符组成一组字符,并分为捕获组(会捕获并在数组中返回)和非捕获组,先行断言和先行否定断言。
  • []:表示字符类,放在[ ]里面的字符,只取其中的一个。
  • {}:表示重复类,{n}表示恰好重复n次,{n,}表示至少重复n次,{n,m}表示重复不少于n次,不多于m次。 

(3)量词符(?,*,+)(也是元字符)

:表示某个模式出现0次或1次,相当于{0,1},(如果?出现在量词符后,表示非贪婪模式,一旦满足就不再往下匹配。量词符,默认情况下都是贪婪模式

*:星号表示某个模式出现0次或多次,相当于{0,}

+:加号表示某个模式出现1次或多次,相当于{1,}

(4)特殊字符

\cX:表示Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符。

[\b]:匹配退格键(U+0008),不要与\b混淆。

\n:匹配换行键。//next-line

\r:匹配回车键。//return

\t:制表符。//tab

\v:匹配垂直制表符。//vertical

\f:匹配换页符。

\0:匹配null字符。

(5)预定义模式

\d:匹配0-9之间的任一数字,相当于[0-9];    //这里”-“在字符类里面表示连字符,表示从……到……这一连续区间,在其他地方都是普通字符,d代表digital

\D:匹配所有0-9以外的字符,相当于[^0-9].    //大写形式与小写形式含义相反,这里“^”出现在在字符类里面,是脱字符,表示除……以外;如果出现在在字符串开始的地方,表示以……开始,$放在字符串结束的地方,表示以……结束。

\w:匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]。//w代表word

\W:除所有字母,数字,下划线以外的字符,相当于[^A-Za-z0-9_]。

\s:匹配空格(包括制表符、空格符、断行服),相当于[\t\r\n\v\f]。//s代表space

\S:匹配非空个的字符,相当于[^\t\r\n\v\f]。

\b:匹配词的边界。

\B:匹配非词边界,即在词的内部。

 (6)修饰符

g修饰符:global,全局匹配,所谓全局就是记录上次匹配的位置,下次冲这个位置开始继续匹配

i修饰符:case-insensitive,忽略大小写

m修饰符:multiline,多行匹配,所谓多行匹配,就是不识别本行最后一个\n字符(如果有),即$(位置字符)不理会\n,例如

/world$/m.test('hello world\n') // true

现在来解释一下这段正则表达式

var reg = /^<(\w+)([^>]{0,})>(.*?)<\/\1>/g;

以”<“开始,\w(字母,数字,下划线)字符匹配一次或多次(组匹配1),非”>“z字符匹配0次或多次(组匹配2),匹配”>“字符,点字符匹配0次或多次并设置为非贪婪模式,匹配”<“字符,\/转义斜杠,\1表示组匹配1.至此,带有属性的元素标签就匹配成功了。

3.匹配的方法

(1)正则对象.exec(字符串),返回数组

(2)正则对象.test(字符串),返回true或false

(3)字符串.match(正则对象),返回数组

(4)字符串.search(正则对象),返回第一个满足条件的匹配结果在整个字符串中的文职,没有返回-1

(5)字符串.replace(字符串/正则对象,替换的内容),替换匹配的值

(6)字符串.split(字符串/正则对象,[返回数组的最大成员数,可选项]),返回一个有分割后的各个部分组成的数组

转载于:https://my.oschina.net/wyc1219/blog/825951

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值