浏览代码

正则讲解完成

HcySunYang 7 年之前
父节点
当前提交
a75c369ec9
共有 1 个文件被更改,包括 13 次插入0 次删除
  1. 13 0
      note/9Vue中的html-parser.md

+ 13 - 0
note/9Vue中的html-parser.md

@@ -205,3 +205,16 @@ const conditionalComment = /^<!\[/
 
 最后很重要的地点是,大家主要,这些正则表达式有一个共同的特点,即:*他们都是从一个字符串的开头位置开始匹配的,因为有 `^` 的存在*。
 
+在这些正则常量的下面,有着这样一段代码:
+
+```js
+let IS_REGEX_CAPTURING_BROKEN = false
+'x'.replace(/x(.)?/g, function (m, g) {
+  IS_REGEX_CAPTURING_BROKEN = g === ''
+})
+```
+
+首先定义了变量 `IS_REGEX_CAPTURING_BROKEN` 且初始值为 `false`,接着使用一个字符串 `'x'` 的 `replace` 函数用一个正则去获取捕获组的值,即:变量 `g`。我们观察字符串 `'x'` 和正则 `/x(.)?/` 可以发现,该正则中的捕获组应该捕获不到任何内容,所以此时 `g` 的值应该是 `undefined`,但是在老版本的火狐浏览器中存在一个问题,此时的 `g` 是一个空字符串 `''`,并不是 `undefined`。所以变量 `IS_REGEX_CAPTURING_BROKEN` 的作用就是用来标识当前宿主环境是否存在该问题。这个变量我们后面会用到,其作用到时候再说。
+
+
+