资讯专栏INFORMATION COLUMN

ECMAScript6 新特性——“正则的扩展”

Shisui / 2051人阅读

摘要:第二个参数指定修饰符,如果存在则使用指定的修饰符。属性表示是否设置了修饰符属性的属性返回正则表达式的正文的属性返回正则表达式的修饰符字符串必须转义,才能作为正则模式。

1 RegExp构造函数

ES6 允许RegExp构造函数接受正则表达式作为参数。第二个参数指定修饰符,如果存在则使用指定的修饰符。

var regexp = new RegExp(/xyz/i, "ig");
console.log(regexp.flags); //gi
2 字符串的正则方法

字符串对象的4个使用正则表达式的方法: match(),replace(),search(),split()这四个方法全部调用RegExp的实例的方法。

3 u修饰符

ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用来正确处理大于uFFFF的Unicode字符;

/^uD83D/u.test("uD83DuDC2A")
// false
/^uD83D/.test("uD83DuDC2A")
// true

一旦加上u修饰符号,就会修改下面这些正则表达式的行为:

点字符

点(.)字符不能识别码点大于0xFFFF的Unicode字符,必须加上u修饰符。

var s = "?";

/^.$/.test(s) // false
/^.$/u.test(s) // true

Unicode字符表示法

大括号表示Unicode字符,只有加上u才能识别

/u{61}/.test("a") // false
/u{61}/u.test("a") // true
/u{20BB7}/u.test("?") // true

量词

使用u修饰符后,所有量词都会正确识别大于码点大于0xFFFF的Unicode字符。

/a{2}/.test("aa") // true
/a{2}/u.test("aa") // true
/?{2}/.test("??") // false
/?{2}/u.test("??") // true

预定义模式

u修饰符也影响到预定义模式

/^S$/.test("?") // false
/^S$/u.test("?") // true

i修饰符

有些Unicode字符的编码不同,但是字型很相近,比如,u004B与u212A都是大写的K。

/[a-z]/i.test("u212A") // false
/[a-z]/iu.test("u212A") // true
4 y修饰符

除了u修饰符,ES6还为正则表达式添加了y修饰符,叫做“粘连”(sticky)修饰符。

y修饰符的作用与g修饰符类似,不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。

var s = "aaa_aa_a";
var r1 = /a+/g;
var r2 = /a+/y;

r1.exec(s) // ["aaa"]
r2.exec(s) // ["aaa"]

r1.exec(s) // ["aa"]
r2.exec(s) // null
5 sticky属性

表示是否设置了y修饰符

6 flags属性
// ES5的source属性
// 返回正则表达式的正文
/abc/ig.source
// "abc"

// ES6的flags属性
// 返回正则表达式的修饰符
/abc/ig.flags
// "gi"
7 RegExp.escape()

字符串必须转义,才能作为正则模式。

function escapeRegExp(str) {
  return str.replace(/[-[]/{}()*+?.^$|]/g, "$&");
}

let str = "/path/to/resource.html?search=query";
escapeRegExp(str)
// "/path/to/resource.html?search=query"

上面的代码和垫片模块regexp.escape都可以https://github.com/ljharb/regexp.escape

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79074.html

相关文章

  • JS语言核心——“正则表达式模式匹配”

    摘要:正则表达式一个描述字符模式的对象正则表达式的定义构造函数正则表达式直接量一对斜杠新特性正则的扩展引用类型类型的注意要点用于模式匹配的方法不支持全局搜索忽略表达式参数中的修饰符两个参数第一个是正则表达式,第二个是要替换的字符串接收一个正则表达 正则表达式(regular expression):一个描述字符模式的对象 1 正则表达式的定义 RegExp()构造函数 正则表达式直接量(一...

    李世赞 评论0 收藏0
  • ECMAScript6 特性——“let和const命令”

    摘要:基本用法所声明的变量,只在命令所在的代码块内有效。在循环中适合使用不存在变量提升不像那样会发生变量提升现象暂时性死区只要块级作用域内存在命令,它所声明的变量就绑定这个区域,不再受外部的影响。块级作用域实际上为新增了块级作用域。 1 let 基本用法 所声明的变量,只在let命令所在的代码块内有效。 { let b = 100; console.log(b); //100...

    PascalXie 评论0 收藏0
  • ECMAScript6 特性——“数值扩展

    摘要:二进制和八进制表示法提供了二进制和八进制数值的新的写法,分别用前缀或和或表示。用来检查是否为有穷以及是否为这两个新方法只对数值有效,非数值一律返回。引入了和这两个常量,用来表示这个范围的上下限。因为有精度限制,超过的次方的值无法精确表示。 1 二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。 console.log(0b10...

    Dean 评论0 收藏0
  • ECMAScript6 特性——“变量解构赋值”

    摘要:数组的解构赋值允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。如果变量名与属性名不一致,必须写成下面这样。 1 数组的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 基本用法 { var [a,[b,c],d,,...f] = [1,[2,3],4,5,6,7]; console...

    Eric 评论0 收藏0
  • ECMAScript6 特性——“字符串扩展

    摘要:吉字符串的遍历器接口为字符串添加了遍历器接口,使得字符串可以被循环遍历。提供字符串实例的方法,用来将字符的不同表示方法统一为同样的形式,这称为正规化。返回布尔值,表示参数字符串是否在源字符串的头部。 1 字符串的Unicode表示法 ES6 只要将码点放入大括号,就能正确解读该字符; var x = u20bb7; document.write(x); //₻7 var x = u{2...

    BlackMass 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<