当前位置:嗨网首页>书籍在线阅读

22-动态构造正则表达式

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

17.20 动态构造正则表达式

本章从一开始,就提倡优先使用正则表达式字面语法而非构造器。除了能少打四个字母,使用字面语法的另一个原因是不用对反斜杠进行转义。真正需要使用构造器的地方是动态构造正则表达式。例如,可能想在一个字符串中匹配一个包含多个用户名的数组,但却没有(好的)办法将这些用户名整合在一个正则表达式字面量中。此时正则表达式构造器就派上用场了,因为它可以通过字符串来构造正则表达式,这样就实现了动态构造。来看一个例子:

const users = ["mary", "nick", "arthur", "sam", "yvette"];
const text = "User @arthur started the backup and 15:15, " +
    "and @nick and @yvette restored it at 18:35.";
const userRegex = new RegExp('@(?:${users.join('|')})\\b', 'g');
text.match(userRegex);  // [ "@arthur", "@nick", "@yvette" ]

与该例中正则表达式等价的字面量是: /@(?:mary|nick|arthur|sam|yvette)\b/g ,不过已经成功的将它动态地构造出来了。需要注意的是,必须在b(单词边界元字符)之前使用双反斜杠,第一个反斜杠是用来转义第二个反斜杠的。