正则表达式匹配#{}中的名称以用于模板使用

use*_*288 2 javascript regex templates prototype

我正在创建一个类型的模板脚本,所以我可以在#{}中放入一个变量名,并将该变量的内容呈现给页面.这是为了原型设计目的.

一个例子是有一个名为"fullname"的变量,它包含文本"John Doe",如果我写这样的html:

<body>
    <p>Hello, #{fullname}! How are you doing?</p>
</body>
Run Code Online (Sandbox Code Playgroud)

它将输出:

<body>
    <p>Hello, John Doe! How are you doing?</p>
</body>
Run Code Online (Sandbox Code Playgroud)

我正在使用等同于/#\ {fullname \}/g的正则表达式,这对我来说非常好用,用以下代码编译它:

 new RegExp('#\{' + varName + '\}','g');
Run Code Online (Sandbox Code Playgroud)

但是,我发现如果将普通数字作为变量名称,表达式会产生意外结果(这些不是javascript变量,因此'1'是有效名称.变量名本身存储在xml中).如果变量名为"1",则正则表达式将替换页面上的所有磅数.

所以/#\ {1 \}/g替换文档中的所有#符号.如果我输入0,它会变得非常时髦,几乎取代了所有东西.2什么都不做.我想知道发生了什么?

编辑 - 我应该注意写出来

/#\{1\}/g
Run Code Online (Sandbox Code Playgroud)

不会引起问题,但是当我使用它时

new RegExp('#\{1\}','g')
Run Code Online (Sandbox Code Playgroud)

出现此问题.

anu*_*ava 5

new RexExp 对象需要双重转义所以使用:

new RegExp('#\\{' + varName + '\\}', 'g');
Run Code Online (Sandbox Code Playgroud)

否则正在使用正则表达式引擎#{1}而不是#\{1\}因此每个#都被替换.