我正在创建一个类别的模板脚本,因此我可以在#{}中放入一个变量名,并将该变量的内容呈现给页面。这是为了进行原型设计。
这样做的一个例子就是有一个名为“fullname”的变量,它包含文本“John Doe”,如果我写这样的html:
<body>
<p>Hello, #{fullname}! How are you doing?</p>
</body>
将输出:
<body>
<p>Hello, John Doe! How are you doing?</p>
</body>
我正在使用等同于/#\ {fullname \} / g的正则表达式,这对我来说非常好用,用以下代码编译:
new RegExp('#\{' + varName + '\}','g');
但是,我发现如果我将普通数字作为变量名称,表达式会产生意外结果(这些不是javascript变量,因此'1'是有效名称。变量名称本身存储在xml中)。如果变量名为“1”,则正则表达式将替换页面上的所有磅数。
所以/#\ {1 \} / g替换文档中的所有#符号。如果我输入0,它会变得非常时髦,几乎取代了所有东西。 2什么都不做。我想知道发生了什么事?
编辑 - 我应该注意写出
/#\{1\}/g
不会导致问题,但是当我使用
时new RegExp('#\{1\}','g')
发生此问题。
答案 0 :(得分:5)
new RexExp
对象需要双重转义才能使用:
new RegExp('#\\{' + varName + '\\}', 'g');
否则正则表达式引擎会#{1}
而不是#\{1\}
,因此每个#
都会被替换。