一篇文章搞懂JavaScript正则表达式之方法(3)

/abc/g.exec('abc-xyz-abc'); // ["abc", index: 0, input: "abc-xyz-abc", groups: undefined] /abc/g.exec('abc-xyz-abc'); // ["abc", index: 0, input: "abc-xyz-abc", groups: undefined] /abc/g.exec('abc-xyz-abc'); // ["abc", index: 0, input: "abc-xyz-abc", groups: undefined] // ...

如果不把正则提取出来,获得它的引用,exec方法就一直在原地打转,因为每次都是一个新的正则实例,每次 lastIndex 都要从0开始。

test

test 是RegExp实例方法。

它的作用是找出源文本是否有匹配项,与字符串方法search相似。多用于表单验证中。

/abc/.test('abc-xyz-abc'); // true /mno/.test('abc-xyz-abc'); // false /abc/.test(); // false

test方法与search方法的区别主要体现在两点:

lastIndex const reg = /abc/g; reg.lastIndex // 0 reg.test('abc-xyz-abc'); // true reg.lastIndex // 3 reg.test('abc-xyz-abc'); // true reg.lastIndex // 11 reg.test('abc-xyz-abc'); // false reg.lastIndex // 0 reg.test('abc-xyz-abc'); // true

修改字符串方法的底层实现

我们也看到了,一部分处理正则的方法定义在String实例上,一部分处理正则的方法定义在RegExp实例上。为了将处理正则的方法全部统一到RegExp实例上,ES2015修改了部分字符串方法的底层实现。

具体来说,ES2015为RegExp实例新增了四个方法,字符串方法 match 、 replace 、 search 、 split 内部调用已经改成了相应的RegExp实例方法。

RegExp.prototype[Symbol.match] RegExp.prototype[Symbol.replace] RegExp.prototype[Symbol.search] RegExp.prototype[Symbol.split]

Symbol.match 是什么? Symbol 是新增的一种基础数据类型,它有11个内置的值,指向语言内部使用的方法。

RegExp.prototype[Symbol.match] 在使用上和 match 相比,调用者和参数翻转一下就可以了。

'abc-mno-xyz'.match(/mno/); // ["mno", index: 4, input: "abc-mno-xyz", groups: undefined] /mno/[Symbol.match]('abc-mno-xyz'); // ["mno", index: 4, input: "abc-mno-xyz", groups: undefined]

总结

以上所述是小编给大家介绍的一篇文章搞懂JavaScript正则表达式之方法的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjxspj.html