RegExp.$1, …, RegExp.$9

已弃用:此功能不再推荐。尽管一些浏览器可能仍然支持它,但它可能已经从相关的 Web 标准中删除,或者正在被删除,或者可能只为了兼容性而保留。避免使用它,并尽可能更新现有代码;请参阅此页面底部的兼容性表 来指导您的决定。请注意,此功能可能随时停止工作。

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

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

描述

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

$1, …, $9的值会在每次RegExp(但不是RegExp子类)实例成功匹配时更新。如果未进行任何匹配,或者上次匹配不包含相应的捕获组,则相应的属性为空字符串。每个属性的设置访问器都是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 功能
# additional-properties-of-the-regexp-constructor

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅