在一位开发人员将RegExp文字改为构造函数调用后,我们最近遇到了一个错误,我想知道为什么会有任何差别.确切的代码是
var parts = new RegExp("/rt:([^@]+)@(\d+)/").exec(tag);
Run Code Online (Sandbox Code Playgroud)
与原来的
var parts = /rt:([^@]+)@(\d+)/.exec(tag);
Run Code Online (Sandbox Code Playgroud)
时tag
是,例如rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077
,第一(童车)调用返回null
,而第二个返回["rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077", "60C1C036-42FA-4073-B10B-1969BD2358FB", "00000000077"]
毋庸置疑,我恢复了这一变化,但我想知道为什么首先会出现这样的差异.
Fel*_*ing 38
有两个问题:
的/
是不表达的一部分.它们是分隔符,标志着正则表达式的字面意思.如果你使用它们必须删除RegExp
它们,否则它们按字面意思匹配斜线.
其次,反斜杠是字符串文字中的转义字符.要\
为表达式创建文字,您必须在字符串中对其进行转义.
因此,等价物将是:
new RegExp("rt:([^@]+)@(\\d+)")
Run Code Online (Sandbox Code Playgroud)
特别是如果要使用,转义使表达式更难写RegExp
.实际上只有在想要动态创建表达式时才需要它,例如,如果要包含存储在变量中的文本.如果你有一个固定的表达式,文字/.../
更容易编写,更简洁.
归档时间: |
|
查看次数: |
5791 次 |
最近记录: |