Javascript:在RegEx的字符串中转义字符问题?

时间:2013-09-18 09:36:58

标签: javascript regex

我在一个字符串中放置一个RegExp模式有一个小问题,我有2个模式都是真的相同。第一个不起作用我假设由于\ d - 它被视为转义字符吗?

            var pattern = '^.{1,5}-\d{1,5}$'; // Doesn't work


            var pattern = '^[a-zA-Z]{1,5}-[0-9]{1,5}$'; // Works

这周围有吗?除了用[0-9]替换\ d?

以下是我正在使用的额外代码

   var regex = new RegExp(pattern);

   var result = regex.test(value);

提前致谢

2 个答案:

答案 0 :(得分:2)

作为found in the documentation,您有几种不同的方式来创建RegExp

正则表达式文字,

var regex = /^.{1,5}-\d{1,5}$/;

RegExp对象的构造函数

var regex = new RegExp("^.{1,5}-\\d{1,5}$");

因为它是一个字符串,你需要转义任何\

同样适用于\ w和其他背面的字符

如果您需要添加到regexp

的变量,则主要使用第二个版本

答案 1 :(得分:1)

如果你希望你正在编写正则表达式的方式,你可以双重逃避d

var pattern = '^.{1,5}-\\d{1,5}$'; // Should work
var regex = new RegExp(pattern);

否则,您可以使用分隔符/直接使用正则表达式:

var pattern = /^.{1,5}-\d{1,5}$/;

在第一个实例中,您将模式存储在字符串中,并且传递给变量的实际字符为:^.{1,5}-\d{1,5}$,因为\d在字符串中没有意义,但{ {1}}是反斜杠和文字\\d。您可以尝试在字符串中添加反斜杠:

d

因此,如果你的意思是字面反斜杠,你必须逃避它。

使用:

console.log('\'); // Won't run
console.log(' \ '); // Returns a space
console.log('\n'); // Returns a newline character

应该更快,如果您多次使用正则表达式,因为在这里,您正在编译正则表达式,以便您可以多次使用它。

另一种方法需要在每次调用时编译正则表达式。