Ajax--form表单与模板引擎--模板引擎的实现原理及实现简易的模板引擎

发布于:2022-11-08 ⋅ 阅读:(408) ⋅ 点赞:(0)

正则与字符串操作

1. 基本语法

exec() 函数用于检索字符串中的正则表达式的匹配。

如果字符串中有匹配的值,则返回该匹配值,否则返回 null

RegExpObject.exec(string)

示例代码如下:

var str = 'hello'

var pattern = /o/

// 输出的结果["o", index: 4, input: "hello", groups: undefined]

console.log(pattern.exec(str))

 2. 分组

正则表达式中 ( ) 包起来的内容表示一个分组,可以通过分组来提取自己想要的内容,示例代码如下:

var str = '<div>我是{{name}}</div>'

 var pattern = /{{([a-zA-Z]+)}}/

 var patternResult = pattern.exec(str)

 console.log(patternResult)

 // 得到 name 相关的分组信息

 // ["{{name}}", "name", index: 7, input: "<div>我是{{name}}</div>", groups: undefined]

加() 

 不加()

加了()表示将内容提取出来,没加就只有匹配,没有提取 

3. 字符串的replace函数

replace() 函数用于在字符串中用一些字符替换另一些字符,语法格式如下:

var result = '123456'.replace('123', 'abc') // 得到的 result 的值为字符串 'abc456' 

示例代码如下:

var str = '<div>我是{{name}}</div>'

var pattern = /{{([a-zA-Z]+)}}/

var patternResult = pattern.exec(str)

str = str.replace(patternResult[0], patternResult[1]) // replace 函数返回值为替换后的新字符串

// 输出的内容是:<div>我是name</div>

console.log(str)

 4. 多次replace

var str = '<div>{{name}}今年{{ age }}岁了</div>'

var pattern = /{{\s*([a-zA-Z]+)\s*}}/

var patternResult = pattern.exec(str)

str = str.replace(patternResult[0], patternResult[1])

console.log(str) // 输出 <div>name今年{{ age }}岁了</div>

patternResult = pattern.exec(str)

str = str.replace(patternResult[0], patternResult[1])

console.log(str) // 输出 <div>name今年age岁了</div>

patternResult = pattern.exec(str)

console.log(patternResult) // 输出 null 

  5. 使用while循环replace

var str = '<div>{{name}}今年{{ age }}岁了</div>'

var pattern = /{{\s*([a-zA-Z]+)\s*}}/

var patternResult = null

while(patternResult = pattern.exec(str)) {

   str = str.replace(patternResult[0], patternResult[1])

}

console.log(str) // 输出 <div>name今年age岁了</div>

 这里patternResult = pattern.exec(str)注意的是赋值操作,只要为ture就继续执行,要是等于null,就转换为false,退出循环 

6. replace替换为真值

var data = { name: '张三', age: 20 }

var str = '<div>{{name}}今年{{ age }}岁了</div>'

var pattern = /{{\s*([a-zA-Z]+)\s*}}/

var patternResult = null

while ((patternResult = pattern.exec(str))) {

   str = str.replace(patternResult[0], data[patternResult[1]])

}

console.log(str) 

 其实就是 data[patternResult[1]] 而 patternResult[1]第一个值为name然后就变成了data[name]然后从var data = { name: '张三', age: 20 }里面取name的value值就是张三,然后就是循环替换

实现简易的模板引擎 

1. 实现步骤

定义模板结构

预调用模板引擎

封装 template 函数

导入并使用自定义的模板引擎

2. 定义模板结构

<!-- 定义模板结构 -->
<script type="text/html" id="tpl-user">
   <div>姓名:{{name}}</div>
   <div>年龄:{{ age }}</div>
   <div>性别:{{  gender}}</div>
   <div>住址:{{address  }}</div>
</script>

3. 预调用模板引擎

<script>
   // 定义数据
   var data = { name: 'zs', age: 28, gender: '男', address: '北京顺义马坡' }
   // 调用模板函数
   var htmlStr = template('tpl-user', data)
   // 渲染HTML结构
   document.getElementById('user-box').innerHTML = htmlStr
</script>

4. 封装template函数

function template(id, data) {
  var str = document.getElementById(id).innerHTML
  var pattern = /{{\s*([a-zA-Z]+)\s*}}/
  var pattResult = null
  while ((pattResult = pattern.exec(str))) {
    str = str.replace(pattResult[0], data[pattResult[1]])
  }
  return str
}

5. 导入并使用自定义的模板引擎

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>自定义模板引擎</title>
    <!-- 导入自定义的模板引擎 -->
    <script src="./js/template.js"></script>
</head>

理解

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到