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