相同的动态正则表达式和内联正则表达式在javascript中不提供相同的输出

相同的动态正则表达式和内联正则表达式在javascript中不提供相同的输出,javascript,regex,Javascript,Regex,我一直盯着同一个正则表达式的这两种口味,不明白为什么结果不同: var projectName="SAMPLE_PROJECT", fileName="1234_SAMPLE_PROJECT", re1 = new RegExp('^(\d+)_SAMPLE_PROJECT$','gi'), re2 = /^(\d+)_SAMPLE_PROJECT$/gi, matches1 = re1.exec(fileName), matches2 = re2.exec(fileName); consol

我一直盯着同一个正则表达式的这两种口味,不明白为什么结果不同:

var projectName="SAMPLE_PROJECT",
fileName="1234_SAMPLE_PROJECT",
re1 = new RegExp('^(\d+)_SAMPLE_PROJECT$','gi'),
re2 = /^(\d+)_SAMPLE_PROJECT$/gi,
matches1 = re1.exec(fileName),
matches2 = re2.exec(fileName);

console.log(matches1);//returns null
console.log(matches2);//returns correctly
以下是jsbin:

你知道我在实例化RegExp时肯定做错了什么吗


谢谢。

在第一种情况下,您有一个字符串文本,它使用
\
引入转义序列<代码>\d在字符串中只是
d
。如果需要
\d
,则需要键入
\\d


在第二种情况下,您有一个正则表达式文本,它不会将
\
解释为字符串转义序列。

re1=new RegExp('^(\\d+)\u SAMPLE\u PROJECT$','gi')
反斜杠\\瘟疫的阶段:
raw(cured)\
string parse\\\\
string double parse\\\\
字符串三重解析
。始终确保使用正确的级别,这取决于文本要经过的字符串解析器的数量。此外,建议在编辑器中为+/-阶段创建宏。不要编写PHP字符串来编写JS字符串,然后将其转换为JS正则表达式。这是受第三阶段反斜杠困扰的为数不多的事情之一。我们不谈论第四阶段(例如,通过eval()进行清洗)。在某种程度上,“除非它确实存在”:
\n
是换行符,字符串中的regexp也是换行符
\\n