Regex表达式与#{}中的名称匹配,以供模板使用
Regex expression matching names in #{} for template usage
我正在创建一个模板脚本,这样我就可以在#{}中放入变量名,并将该变量的内容呈现到页面上。这是为了进行原型设计。
这方面的一个例子是有一个名为"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'}
,因此每个#
都将被替换。
相关文章:
- 将po-box javascript正则表达式转换为c#regex
- regex look-behind:无效的正则表达式:/(?<=.)S+$/:无效的组
- 加入Regex表达式数组
- Regex表达式无法用于密码验证
- regex表达式不适用于验证信用卡到期信息
- 将Javascript正则表达式模式转换为C++std::regex的规则
- Regex表达式与#{}中的名称匹配,以供模板使用
- 为什么javascript替换方法(没有regex)在angularjs表达式中不起作用来删除 
- Regex表达式,用于替换两个字符(包括字符)之间的字符串
- 用第一个匹配的正则表达式覆盖第二个匹配的regex
- 组合多个/^(xyz)/regex表达式
- jquery regex表达式警报框
- 使用带有.match Regex表达式的变量的JavaScript
- Javascript 将 “rgb(xx,xx,xx)” 与正则表达式 regEx 匹配
- jQuery 正则表达式 (regex).
- 正则表达式RegEx挑战
- 正则表达式(regex): /W带连字符(javascript)
- 如何从json使用正则表达式(regex)在php中的内容
- JavaScript中的正则表达式(regex)
- 如何使用正则表达式(Regex)从字符串中获取电话号码