知识卡片
字面量适合常量
内容
创建 RegExp 对象有两种方式:正则字面量(斜杠包裹,编译期确定)和 RegExp 构造器(接收字符串,运行时编译)。固定模式优先用字面量——更直接,也不必处理反斜杠双重转义;只有运行时动态拼装模式才用构造器。同一字面量创建的正则对象可能共享单例,修改 lastIndex 等状态会互相影响。发散:能静态表达的约束尽量静态表达,运行期生成正则增加转义和测试复杂度。
参考来源
- 位置:《JavaScript语言精粹(修订版)》第7章《正则表达式 Regular Expressions》"结构"一节
- 结论依据:原文说明"有两个方法来创建一个RegExp对象……优先考虑的方法是使用正则表达式字面量",并指出 RegExp 构造器"适用于必须在运行时动态生成正则表达式的情形",同时警告反斜杠在正则表达式和字符串字面量中的转义规则不同、构造器写法需要双写反斜杠,据此推出固定模式优先用字面量、动态模式才用构造器的结论。
- 原始内容:有两个方法来创建一个RegExp对象。在以前的例子中我们可以看到,优先考虑的方法是使用正则表达式字面量……创建这个字符串时请多加小心,因为反斜杠在正则表达式和在字符串字面量中有一些不同的含义……RegExp构造器适用于必须在运行时动态生成正则表达式的情形。