Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式匹配#{}中用于模板使用的名称_Javascript_Regex_Templates_Prototype - Fatal编程技术网

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

Javascript 正则表达式匹配#{}中用于模板使用的名称,javascript,regex,templates,prototype,Javascript,Regex,Templates,Prototype,我正在创建一个模板脚本,这样我就可以在#{}中插入一个变量名,并将该变量的内容呈现给页面。这是为了原型的目的 一个例子是有一个名为“fullname”的变量,其中包含文本“John Doe”,如果我这样编写html: <body> <p>Hello, #{fullname}! How are you doing?</p> </body> 但是,我发现如果我将普通数字作为变量名,表达式会给出意外的结果(这些不是javascript变量,因此

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

一个例子是有一个名为“fullname”的变量,其中包含文本“John Doe”,如果我这样编写html:

<body>
    <p>Hello, #{fullname}! How are you doing?</p>
</body>
但是,我发现如果我将普通数字作为变量名,表达式会给出意外的结果(这些不是javascript变量,因此“1”是一个有效的名称。变量名本身存储在xml中)。如果变量名为“1”,则正则表达式将替换页面上的所有磅

因此/#\{1\}/g替换文档中的所有#符号。如果我改为输入0,它会变得非常时髦,几乎可以替换所有内容。2什么都不做。我想知道发生了什么事

编辑- 我应该注意到

/#\{1\}/g
不会引起问题,但在我使用

new RegExp('#\{1\}','g')

出现此问题。

新的RexExp对象需要双重转义,因此请使用:

new RegExp('#\\{' + varName + '\\}', 'g');

否则,正则表达式引擎将得到
{1}
而不是
{1\}
,因此每个
{/code>都将被替换。

谢谢。就这样。我忘了\也是字符串中的一个特殊字符。。。
new RegExp('#\{1\}','g')
new RegExp('#\\{' + varName + '\\}', 'g');