1.我不太理解第一个问号前面是匹配什么的?以空格开头?这个正则功能是用来匹配js的那几个关键词的,但是我不知道这么写的原理,原文链接在这里传送门
1.我不太理解第一个问号前面是匹配什么的?以空格开头?这个正则功能是用来匹配js的那几个关键词的,但是我不知道这么写的原理,原文链接在这里传送门
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
看这个例子,模板引擎的语法应该是类似于这种:
<%%>
,在<%
的后面和%>
的前面可以没有空格,也可以有一个空格,比如<%name%>
和<% name %>
应该被认为是一样的,所以为了满足这个需求,前面需要添加一个( )?
,( )
表示匹配一个空格,?
表示前面的重复0到1次,所以( )?
的意思就是说可以有一个空格,也可以没有。结合代码,里面有两个正则:
第一个正则会匹配
<%%>
然后把<%
和%>
之间的内容保存下来,第二个正则正好会处理第一个正则保存下来的内容。在
while
循环中,首先用第一个re
去匹配(match = re.exec(tpl)
),然后<%
和%>
之间的内容被保存在match[1]
中,然后用re2
去匹配(re2.test(match[1])
)。注意,
re
把<%
和%>
之间的内容全部放在match[1]
中了,所以如果是<%name%>
那么match[1]
中的就是"name"
,但是如果是<% name %>
那么match[1]
中的就是" name "
,所以需要使用( )?
来处理一下空格。