Regex表达式与#{}中的名称匹配,以供模板使用

Regex expression matching names in #{} for template usage

本文关键字:表达式 Regex      更新时间:2023-09-26

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

这方面的一个例子是有一个名为"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>

我使用的regex表达式相当于/#''{fullname''}/g,它对我来说运行得很好,用编译它

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

然而,我发现,如果我把纯数字作为变量名,表达式会给出意外的结果(这些不是javascript变量,所以"1"是一个有效的名称。变量名本身存储在xml中)。如果变量名为"1",则正则表达式将替换页面上的所有磅。

因此/#''{1''}/g将替换文档中的所有#符号。如果我改为输入0,它会变得非常时髦,几乎取代了所有内容。2不起任何作用。我想知道发生了什么?

编辑-我应该注意写

/#'{1'}/g

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

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

出现此问题。

new RexExp对象需要双重转义,因此使用:

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

否则正则表达式引擎将获得#{1}而不是#'{1'},因此每个#都将被替换。