正则表达式一直是前端开发中非常重要的一部分,它可以帮助我们快速地匹配和处理字符串。在 ES2017 标准中,正则表达式得到了一些扩展,让它更加强大和易用。本文将介绍 ES2017 中的正则扩展,包括新的修饰符、新的方法和属性等。
修饰符
s 修饰符
在以前的正则表达式中,.
匹配除了换行符外的任何字符。但是在某些情况下,我们需要匹配包括换行符在内的任何字符。在 ES2017 中,可以使用 s
修饰符来实现这个功能。例如:
const str = 'hello\nworld'; const reg = /hello.world/s; console.log(reg.test(str)); // true
上面的代码中,/hello.world/s
表示匹配 hello
和 world
之间包括换行符在内的任何字符。
y 修饰符
在以前的正则表达式中,使用 g
修饰符进行全局匹配时,匹配的位置是从上一次匹配的位置开始的。而在 ES2017 中,可以使用 y
修饰符来进行粘连匹配,也就是从上一次匹配的结束位置开始匹配。例如:
const str = 'hello world'; const reg = /l/y; console.log(reg.exec(str)); // ['l'] console.log(reg.exec(str)); // ['l'] console.log(reg.exec(str)); // null
上面的代码中,/l/y
表示匹配 str
中的所有 l
,但是需要从上一次匹配的结束位置开始匹配。因此第一次匹配到了 h
后的第一个 l
,第二次匹配到了 o
后的第一个 l
,第三次没有匹配到任何字符,返回了 null
。
方法
RegExp.prototypeSymbol.matchAll
RegExp.prototype[Symbol.matchAll]()
方法返回一个迭代器,可以用来迭代一个字符串中所有匹配正则表达式的位置和捕获组。例如:
const str = 'hello world'; const reg = /l/g; for (const match of reg[Symbol.matchAll](str)) { console.log(match); } // ['l', index: 2, input: 'hello world', groups: undefined] // ['l', index: 3, input: 'hello world', groups: undefined] // ['l', index: 9, input: 'hello world', groups: undefined]
上面的代码中,/l/g
表示匹配 str
中的所有 l
。使用 reg[Symbol.matchAll](str)
返回一个迭代器,可以迭代所有匹配的位置和捕获组。
String.prototype.padStart() 和 String.prototype.padEnd()
String.prototype.padStart()
和 String.prototype.padEnd()
方法可以用来在字符串的开头或结尾添加一定数量的字符,以达到指定的长度。例如:
const str = 'hello'; console.log(str.padStart(10, '-')); // '-----hello' console.log(str.padEnd(10, '-')); // 'hello-----'
上面的代码中,str.padStart(10, '-')
表示在 str
的开头添加 -
直到字符串长度达到 10,str.padEnd(10, '-')
表示在 str
的结尾添加 -
直到字符串长度达到 10。
属性
RegExp.prototype.flags
RegExp.prototype.flags
属性返回正则表达式的修饰符。例如:
const reg = /hello/gi; console.log(reg.flags); // 'gi'
上面的代码中,/hello/gi
表示匹配 hello
并且全局匹配、忽略大小写。使用 reg.flags
返回正则表达式的修饰符。
总结
ES2017 中的正则扩展为我们提供了更加强大和便利的正则表达式操作。包括新的修饰符、新的方法和属性等。我们可以根据实际需求选择合适的扩展来进行字符串匹配和处理。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6576b95ad2f5e1655d01cc16