|
@@ -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` 的作用就是用来标识当前宿主环境是否存在该问题。这个变量我们后面会用到,其作用到时候再说。
|
|
|
+
|
|
|
+
|
|
|
+
|