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)
出现此问题.
new RexExp 对象需要双重转义所以使用:
new RegExp('#\\{' + varName + '\\}', 'g');
Run Code Online (Sandbox Code Playgroud)
否则正在使用正则表达式引擎#{1}而不是#\{1\}因此每个#都被替换.