为什么正则表达式在构造为字符串时停止工作?

时间:2017-08-20 08:03:45

标签: javascript regex

我有一个正则表达式,通过本机正则表达式原语构建时可以正常工作:

var regex = /^(?:533-)?\d{3}-\d{4}$/;
'533-123-4567'.match(regex)
["533-123-4567", index: 0, input: "533-123-4567"]

但在通过字符串构造时失败:

var regex = new RegExp('/^(?:533-)?\d{3}-\d{4}$/');
'533-123-4567'.match(regex)
null

我试图逃避反斜杠无济于事。关于必须转义哪些字符的文档在哪里?

4 个答案:

答案 0 :(得分:1)

您必须在第二个例子中执行此操作

WorkerScript {
    id: myWorker
    source: "func.js"
    onMessage: {
        switch(messageObject.action)
        {
        case 'start':
            spinner.running = true;
            uiController.doSomething();
            break;
        case 'finish':
            spinner.running = false;
            uiController.doSomethingAnother();
            break;
        }
    }
}

  

此处您无需指定 / regex / ,只需正则表达式即可   也将 \ d 改为 \\ d 为我工作了

这在MDN docs中给出。你可以看看吗

答案 1 :(得分:1)

您需要转义\。查看从相同的正则表达式生成的正则表达式。在下面的输出中,您会注意到字符串\d已更改为d



var regex = /^(?:533-)?\d{3}-\d{4}$/;
console.log(regex);

var str = '/^(?:533-)?\d{3}-\d{4}$/';
console.log(str)




逃避\d,你的正则表达式就可以了。



var regex = /^(?:533-)?\d{3}-\d{4}$/;
console.log('533-123-4567'.match(regex));

var regex = new RegExp('^(?:533-)?\\d{3}-\\d{4}$');
console.log('533-123-4567'.match(regex));




答案 2 :(得分:1)

你需要:

  • \标记转为\\
  • 删除封闭的/标志。



var regex = new RegExp('^(?:533-)?\\d{3}-\\d{4}$');
console.log('533-123-4567'.match(regex));




答案 3 :(得分:1)

当您使用构造的new RegExp ()时,您不需要转义或封闭(//)字符串。你的第二个正则表达式可能如下所示:

var regex = new RegExp('^(?:533-)?\\d{3}-\\d{4}$');
console.log('533-123-4567'.match(regex));

请参阅文档here

然而,第一个正则表达式需要你可以逃避,因为你没有调用构造函数,你必须精确到你正在编写的javascript是一些正则表达式。