我有一个正则表达式,通过本机正则表达式原语构建时可以正常工作:
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
我试图逃避反斜杠无济于事。关于必须转义哪些字符的文档在哪里?
答案 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是一些正则表达式。