书接上文,虽然我不怎么会根据实际情况写正则表达式,但是会用还是很必要的。
/^([a-f0-9A-F]{2}:){5}[a-f0-9A-F]{2}$/.test (val)
下面开始说前面代码里出现的test。
说起这个test,我看到她前后都有内容,我就想起来男女谈恋爱之间的故事了。我姑且把正则表达式(或者说是规则模板)当男的,字符串当女的。
于是test是桥梁,左边是男的,右边是女的。我们看到这个例子里呢,应该是男的追女的。至于追没追上呢?这就要看实际情况(也就是后面的val值)了。追上后,又能产生怎样的结果呢?请接着看。
可是现实世界里,也不都是男的追女的吧?毕竟男女平等,女的也表示要扛起半边天,于是,我们也可以将字符串内容放到前面去追男生了。’
于是正则表达式便有两种分类了,一种是正则对象在前,字符串在后,另一种就是反过来了。
我们称之为正则表达式的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表示应用正则表达式的字符串。
怎么理解呢?我们可以认为这个是男生同时去追女生,一个一个去尝试,只要有女生同意,就不追了,记住是谁。然后一块好好过日子。之后,我们记录到底追了几个女生(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只能让你直到,最后到底是不是孤单一生。
男生追女生的故事就到这里,下面开始谈女生追男生的故事。
正则表达式的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