RegExp.$1, …, RegExp.$9

已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。

注意:所有暴露全局最后匹配状态的 RegExp 静态属性都已弃用。有关更多信息,请参阅 已弃用的 RegExp 功能

RegExp.$1, …, RegExp.$9 静态访问器属性返回括号括起来的子字符串匹配。

描述

由于 $1$9RegExp 的静态属性,因此您始终将它们用作 RegExp.$1RegExp.$2 等,而不是作为您创建的 RegExp 对象的属性。

每当 RegExp(但不是 RegExp 子类)实例成功匹配时,$1, …, $9 的值就会更新。如果没有进行匹配,或者最后一次匹配没有相应的捕获组,则相应的属性为空字符串。每个属性的设置访问器是 undefined,因此您不能直接更改这些属性。

可能的括号括起来的子字符串的数量是无限的,但 RegExp 对象只能容纳前九个。您可以通过返回数组的索引来访问所有括号括起来的子字符串。

$1, …, $9 也可以在 String.prototype.replace() 的替换字符串中使用,但这与 RegExp.$n 的旧属性无关。

示例

在 RegExp.prototype.test() 中使用 $n

以下脚本使用 RegExp.prototype.test() 方法从通用字符串中提取一个数字。

js
const str = "Test 24";
const number = /(\d+)/.test(str) ? RegExp.$1 : "0";
number; // "24"

请注意,在 re.test(str) 调用和 RegExp.$n 属性之间的任何涉及其他正则表达式的操作都可能产生副作用,因此应立即访问这些特殊属性,否则结果可能出乎意料。

规范

规范
旧的 RegExp 功能
# RegExp 构造函数的附加属性

浏览器兼容性

另见