当前位置: 首页 > 面试题库 >

Javascript regexp文字和构造函数之间的区别

班高明
2023-03-14
问题内容

在同一个开发人员将RegExp字面量更改为构造函数调用后,我们最近遇到了一个错误,我想知道为什么根本没有区别。确切的代码

var parts = new RegExp("/rt:([^@]+)@(\d+)/").exec(tag);

与原始的

var parts = /rt:([^@]+)@(\d+)/.exec(tag);

tag例如rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077,当为时,第一个(越野车)呼叫返回null,而第二个(返回)["rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077", "60C1C036-42FA-4073-B10B-1969BD2358FB", "00000000077"]

不用说,我撤消了更改,但是我想知道为什么首先会有如此不同。


问题答案:

有两个问题:

/ 表达的一部分。它们是 分隔符 ,标记了正则表达式文字。如果使用则必须将其删除RegExp,否则它们在字面上会匹配一个斜杠。

其次,反斜杠是字符串文字中的转义字符。要\为表达式创建文字,您必须在字符串中对其进行转义。

因此,等效项为:

new RegExp("rt:([^@]+)@(\\d+)")

如果要使用表达式,转义尤其会使表达式难以编写RegExp。实际上,仅当您要动态创建表达式时才需要它,也就是说,例如要包含存储在变量中的文本。如果您有固定的表达式,则文字/.../更容易编写且更简洁。



 类似资料:
  • 问题内容: 我注意到使用PyCharm可以转换 字典文字 : 到 dict构造函数中 : 这些不同的方法是否在某些重要方面有所不同? (在写这个问题时,我注意到使用数字键..似乎是不可能的,但是,显然不可能。 问题答案: 我认为您已经指出了最明显的区别。除此之外, 第一个不需要查找,这应该使其快一点 第二查找中,然后和出土文物内置的,所以你可以通过定义一个本地被叫交换机的行为,例如,虽然我想不出任

  • 问题内容: 我一直在做大学项目的作业。有一次,当您实际上可以使用构造函数方法来实现相同的结果时,我对于getter和setter的实际使用感到困惑。我已经搜索并找到许多答案,但没有令人满意的解释。我有如下laptop.java 和laoptopRecords.java调用构造函数为 在这里,我没有使用getter和setter方法,并且为每个便携式计算机对象都获得了理想的结果。 如果我以如下方式在

  • 我在react native中开发了几个类,出现了以下问题: 酒吧类:

  • 问题内容: 其实我不明白,无参数构造函数和默认构造函数有什么区别。 创建名为cFrame的Test对象时,这是否调用此类的默认构造函数? 问题答案: 该构造函数是一个无参数的构造函数,代表您的Java编译器插入; 它包含对(not )的调用,这是默认行为。如果实现任何构造函数,则不再收到默认的构造函数。 JLS-8.8.9。默认构造函数说(部分), 如果一个类不包含构造函数声明,则隐式声明一个没有

  • 问题内容: 最近,我经常使用枚举。所以我想知道… 私有Enum构造函数和带有任何可见性修饰符(package-private)的枚举构造函数之间有什么区别吗? 问题答案: 根据java 文档 枚举类型的构造函数必须是程序包私有或私有访问。 但加入了JLS 如果没有为枚举类型的构造函数指定访问修饰符,则该构造函数为私有。 因此,package-private和private之间没有区别。

  • 实际上,我不明白无参数构造函数和默认构造函数的区别是什么。 在创建名为cFrame的Test对象时,是否调用此类的默认构造函数?