正则表达式 去参数_手把手带你傻瓜式理解正则表达式(2)

书接上文,虽然我不怎么会根据实际情况写正则表达式,但是会用还是很必要的。

/^([a-f0-9A-F]{2}:){5}[a-f0-9A-F]{2}$/.test (val)

下面开始说前面代码里出现的test。

说起这个test,我看到她前后都有内容,我就想起来男女谈恋爱之间的故事了。我姑且把正则表达式(或者说是规则模板)当男的,字符串当女的。

于是test是桥梁,左边是男的,右边是女的。我们看到这个例子里呢,应该是男的追女的。至于追没追上呢?这就要看实际情况(也就是后面的val值)了。追上后,又能产生怎样的结果呢?请接着看。

aef03fb803912af0f5ac3523b2cdaefe.png

可是现实世界里,也不都是男的追女的吧?毕竟男女平等,女的也表示要扛起半边天,于是,我们也可以将字符串内容放到前面去追男生了。’

于是正则表达式便有两种分类了,一种是正则对象在前,字符串在后,另一种就是反过来了。

我们称之为正则表达式的RegExp对象方法和正则表达式的String对象方法两种情况。

正则表达式的RegExp对象方法(正则表达式在前,字符串为参数:)(男生追女生)

RegExp 对象在coding中这 2 个对象方法:exec(),test()。

1、先说说exec()

var s = '_x_x';var r1 = /x/;var r2 = /y/;r1.exec(s) // ["x"]r2.exec(s) // null

专门为捕获组而设计的。返回值包含:第一个匹配项信息的数组(在没有匹配项的情况下返回null),数组包含两个属性:index和input。index表示匹配项出现在字符串中的位置,input表示应用正则表达式的字符串。

4c75311242839af9dc089f85f6643bbd.png

怎么理解呢?我们可以认为这个是男生同时去追女生,一个一个去尝试,只要有女生同意,就不追了,记住是谁。然后一块好好过日子。之后,我们记录到底追了几个女生(input),然后,追到的是第几个(index),当然,如果没有女生同意,就只好孤单过一生了。(null)

如果正则表达式带有g修饰符,则可以使用多次exec方法,下一次搜索的位置从上一次匹配成功结束的位置开始。

var reg = /a/g;var str = 'abc_abc_abc'var r1 = reg.exec(str);r1 // ["a"]r1.index // 0reg.lastIndex // 1var r2 = reg.exec(str);r2 // ["a"]r2.index // 4reg.lastIndex // 5var r3 = reg.exec(str);r3 // ["a"]r3.index // 8reg.lastIndex // 9var r4 = reg.exec(str);r4 // nullreg.lastIndex // 0

上面代码连续用了四次exec方法,前三次都是从上一次匹配结束的位置向后匹配。当第三次匹配结束以后,整个字符串已经到达尾部,匹配结果返回null,正则实例对象的lastIndex属性也重置为0,意味着第四次匹配将从头开始。

这里的意思呢,就是男生在众多女生之间不停的试探,也就是比较花心了,非得把所有女生的心都试探一遍,同意一个,就和她好,然后继续去找新的,直到没有姑娘可试了,得到null的结果才停止。

2、.test() 方法

/boy/.test('girls and boy')

test() 方法检索字符串中的指定值。返回值是 true 或 false。

test就想男生直接向女生表白,就想知道答案,同意或者拒绝。只要有姑娘同意,就和她好好过日子了。

如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。

var r = /x/g;var s = '_x_x';r.test(s)truer.test(s)truer.test(s)false

带g的时候,就像男生从前到后向所有的姑娘表白,非得弄清楚所有女孩的心思。和上面的exec相似的做法,但是这个方法只能得到一个同意与不同意的答案。

综上所述,exec()和test()之间的区别呢,基本就是返回值不一样了,exec()可以让你直到,男生到底追上了哪个女生,追到了几个。而test只能让你直到,最后到底是不是孤单一生。

ef23b796d778d87fb3d2fa7fe1d2a492.png

男生追女生的故事就到这里,下面开始谈女生追男生的故事。

正则表达式的String对象方法(字符串在前,正则表达式为参数)(女生追男生)

string对象方法:search(),match(),replace()

1、.match()方法

字符串实例对象的match方法对字符串进行正则匹配,返回匹配结果。

var s = '_x_x';var r1 = /x/;var r2 = /y/;s.match(r1) // ["x"]s.match(r2) // null

字符串实例对象的match方法对字符串进行正则匹配,返回匹配结果。

这个和男生追女生的那个exec()方法很像了,最终都是要得到男生究竟是谁,涨啥样子,如果没追到,就返回null。

如果正则表达式带有g修饰符,则该方法与正则对象的exec方法行为不同,会一次性返回所有匹配成功的结果。

var s = 'abba';var r = /a/g;s.match(r) // ["a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值